Как программно перебрать строки сетки данных? - PullRequest
3 голосов
/ 09 августа 2008

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

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

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

Ответы [ 4 ]

5 голосов
/ 09 августа 2008
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]);
}
1 голос
/ 11 августа 2008
object cell = myDataGrid[row, col];
0 голосов
/ 12 августа 2008

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

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

0 голосов
/ 09 августа 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...