如何在 WPF DataGrid 的行和列中迭代,例如在C#中使用 Forms DataGridView ?
例如,如果你有Forms DataGridView,你可以这样做:
for(int i = 0; i < formsDataGrid1.Rows.Count; i++)
{
MessageBox.Show(formsDataGrid1.Rows[i].ToString());
for(int j = 0; j < formsDataGrid1.Columns.Count; j++)
MessageBox.Show(formsDataGrid1.Rows[i].Cells[j].ToString());
}
感谢您的帮助!
我想这样做的原因是用户将使用DataGrid在DataGrid的第二列中输入某些信息。此外,此DataGrid有多行,我希望能够获取该数据并使用它更新数据库。
答案 0 :(得分:4)
通常,您不这样做:您访问基础数据源而不是DataGrid本身。例如,假设数据源是IEnumerable<Foo>
:
foreach(Foo f in foos)
{
MessageBox.Show(f.Name);
}
编辑:
您无需显式访问网格的特定单元格:如果网格绑定到对象列表,则当用户编辑网格中的相应单元格时,对象的属性将自动更新。
包含联系人列表的简单示例:
public class Contact
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
...
ObservableCollection<Contact> contacts = new ObservableCollection<Contact>();
dataGrid.ItemsSource = contacts;
...
答案 1 :(得分:4)
dg是您的XAML DataGrid x:名称
for (int i = 0; i < dg.Items.Count; i++)
{
DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(i);
for (int j = 0; j < dg.Columns.Count; j++)
{
TextBlock cellContent = dg.Columns[j].GetCellContent(row) as TextBlock;
Console.WriteLine(cellContent.Text);
}
}
答案 2 :(得分:0)
尝试使用Grid.Column[x].GetCellContent(Row[y])
方法