Часто возникает подребность привязки какого-либо 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.