Во-первых, ObjectDataSource обычно используется в ASP.NET WebForms (aspx).ObjectDataSource находится в System.Web.UI.WebControls, так как вы можете увидеть эту ссылку в библиотеке MSDN:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.aspx
Использование ObjectDataSource для привязки ваших данных означает, что вы будете связыватьИсточник данных, как объект, может быть в форме DataSet или любого другого объекта .NET, который реализует IEnumerable.Использование ObjectDataSource означает, что вы должны выполнить свой собственный метод выбора, обновления, вставки и удаления, который обычно находится в SqlDataSource.
В библиотеке MSDN есть хороший обзор: Пошаговое руководство. Привязка данных к пользовательскому бизнес-объекту
Но привязка к простому IEnumerable без реализации IListSource (как у DataTable) означает, что у вас не будет хорошей функции, такой как привязки данных, к сложному элементу управления данными, например GridView.И вы потеряете и другую функцию, потому что один простой IEnumerable не может быть связан двумя способами с другими элементами управления списками, такими как ListView и GridView.
Чтобы ваши данные можно было связывать двумя способами, ваш объекттакже необходимо реализовать интерфейс INotifyPropertyChanged перед добавлением в IListSource в качестве элемента данных.
Образцы:
public class Employee : BusinessObjectBase
{
private string _id;
private string _name;
private Decimal parkingId;
public Employee() : this(string.Empty, 0) {}
public Employee(string name) : this(name, 0) {}
public Employee(string name, Decimal parkingId) : base()
{
this._id = System.Guid.NewGuid().ToString();
// Set values
this.Name = name;
this.ParkingID = parkingId;
}
public string ID
{
get { return _id; }
}
const string NAME = "Name";
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
// Raise the PropertyChanged event.
OnPropertyChanged(NAME);
}
}
}
const string PARKING_ID = "Salary";
public Decimal ParkingID
{
get { return parkingId; }
set
{
if (parkingId != value)
{
parkingId = value;
// Raise the PropertyChanged event.
OnPropertyChanged(PARKING_ID);
}
}
}
}
Это реализация INotifyPropertyChanged:
public class BusinessObjectBase : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
private void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (null != PropertyChanged)
{
PropertyChanged(this, e);
}
}
#endregion
}