Во-первых, 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 означает, что вы должны выполнить свой собственный метод Select, Update, Insert и Delete, который обычно находится в 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
}
person
Eriawan Kusumawardhono
schedule
30.09.2011