3

如何像C# 中的 Forms DataGridView 一样在WPF DataGrid的行和列中进行迭代?

例如,如果您有 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 有多行,我希望能够获取该数据并用它更新数据库。

4

3 回答 3

6

dg 是您的 XAML DataGrid x:Name

    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);
            }
    }
于 2015-02-05T00:53:59.917 回答
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;

    ...
于 2009-08-18T16:44:08.807 回答
0

尝试使用Grid.Column[x].GetCellContent(Row[y])方法

于 2012-02-02T08:30:11.563 回答