Как программно перебирать строки таблицы данных?

Я внезапно вернулся к WinForms после многих лет веб-разработки, и у меня возникли проблемы с чем-то, что должно быть простым. У меня есть ArrayList бизнес-объекты, привязанные к Windows Forms DataGrid . Я бы хотел, чтобы пользователь мог редактировать ячейки, а когда закончите, нажмите кнопку «Сохранить». На этом этапе я хотел бы перебрать все строки и столбцы в, DataGrid чтобы найти любые изменения и сохранить их в базе данных. Но я не могу найти способ получить доступ к DataGrid строкам.

Я также хочу проверять отдельные ячейки в реальном времени по мере их редактирования, но я уверен, что это можно сделать. (Может быть , не с ArrayList как DataSource ?) Но для итерация DataGrid, я очень удивлен , что не представляется возможным.

Должен ли я действительно помещать данные моих бизнес-объектов в таблицы данных, чтобы использовать сетку данных?

Ответов (4)

Решение
foreach(var row in DataGrid1.Rows)
{
  DoStuff(row);
}
//Or ---------------------------------------------   
foreach(DataGridRow row in DataGrid1.Rows)
{
  DoStuff(row);
}
//Or ---------------------------------------------
for(int i = 0; i< DataGrid1.Rows.Count - 1; i++)
{
  DoStuff(DataGrid1.Rows[i]);
}
object cell = myDataGrid[row, col];

Есть ли что-нибудь в WinForms 3.0 намного лучше, чем в 1.1?

Я не знаю насчет 3.0, но вы можете написать код в VS 2008, который работает на платформе .NET 2.0. (Итак, вы можете использовать последнюю версию языка C#, но вы можете использовать только библиотеки 2.0)

Это дает вам Generics ( List<DataRow> вместо этих GodAwful ArrayLists) и массу других вещей, вы буквально в конечном итоге напишете в 3 раза меньше кода.

Ага, правда просто еще раз всех проверял! :) Реальный ответ: вам редко нужно перебирать сетку данных. Потому что даже при привязке к ArrayList привязка является двухсторонней. Тем не менее, полезно знать, как выполнять итерацию сетки напрямую, время от времени это может сэкономить несколько строк кода.

Но NotMyself и Orion дали лучшие ответы: убедить заинтересованные стороны перейти на более новую версию C#, чтобы сэкономить затраты на разработку и повысить ремонтопригодность и расширяемость.