Часто возникает подребность привязки какого-либо web-элемента к данным на основе коллекций.
Первое, что приходит в голову - это сформировать DataTable или DataSet и после этого вызвать DataBind:
Метод формирующий DataSet:
public DataSet GetOrganisationNames()
{
//Формируем DataSet
DataSet dataSet = new DataSet("OrganisationNames");
//Добавляем таблицу с колонками
DataTable table = new DataTable("OrganisationNamesTable");
table.Columns.Add("OrganisationName");
dataSet.Tables.Add(table);
ArrayList persons = _manager.GetPersons();
//Формируем DataSet и возвращаем результат
foreach (string person in persons)
{
table.Rows.Add(
new object[]
{
person.OrganisationName
});
}
return dataSet;
}
Использование метода:
grdTable.DataSource = GetOrganisationNames();
grdTable.DataBind();
Но оказывается, что можно сделать все гораздо проще! А именно если у person есть свойство (именно свойство) OrganisationName, то привязку можно сделать к этому свойству:
public ArrayList GetOrganisationNames()
{
return _manager.GetPersons();
}
Использование метода то же самое:
grdTable.DataSource = GetOrganisationNames();
grdTable.DataBind();
Привязка в гриде соответственно в свойствах колонки DataMember = OrganisationName. Если использовать какой-либо другой контрол (например, Repeater), то привязку можно делать так:
<%# DataBinder.Eval(Container.DataItem, "OrganisationName") %>
Таким образом, мы избавились от дополнительных ненужных операций по заливанию данных в DataSet.