我可以以编程方式向 WPF 数据表格添加一行吗?

3

我只想添加一行新数据,我的数据源是以对象的形式存在的,我需要进行一些处理。在WPF DataGrid中,我需要像下面这样做...

DataRow row = dataTable.NewRow();
foreach (NavItem item in record.Items)
{
    row[item.FieldNo.ToString()] = item.RecordValue;
}
dataTable.Rows.Add(row);

3
为什么不将你的数据源与 WPF 数据表格的项源绑定,这样当你的数据源更新时(比如添加了新行),它也会被添加到 WPF 数据表格中。 - Bhupendra
我尝试将datatable绑定到itemssource,它可以工作,但是与wpf datagrid的标题、可见性和其他映射不正确。我尝试了一个字典列表,其中我希望键是列,值是行值,但这并不起作用。我已经没有更多的想法了,在网上所有的资源都是静态列。 - Kervin Ramen
我的数据源是对象,需要在显示之前进行处理,因此我不能直接绑定它。 - Kervin Ramen
我不能只是将它绑定到我创建的对象上,使用动态列吗? - Kervin Ramen
https://dev59.com/LXRB5IYBdhLWcg3wJkhC - Mohsen
2个回答

3
你应该使用一个ObservableCollection<NavItem>作为datagrid的数据源。然后,只需将新元素添加到你的集合中,它就会自动添加到datagrid中。
请参阅此MSDN文章

0

我不知道这是否是正确的解决方案,但在绝望中我想到了类似于这样的东西:

foreach (NavField field in this.Fields)
 {
      DataGridTextColumn column = new DataGridTextColumn();
      column.Header = field.FieldNo.ToString();

      //Some other logic
      // Hide non active and hidden fields
      if (!field.Active || !field.Show)
           column.Visibility = System.Windows.Visibility.Collapsed;

       grid.Columns.Add(column);
  }

然后我将数据表添加为项目源:

  this.dataGridLines.ItemsSource = dataTable.DefaultView;

如果我直接设置 datatable,它就不会关心来自 datatable 的列,并且会自动生成它自己的列,不知道为什么。。

您还需要设置:AutoGenerateColumns为false; - Kervin Ramen
那么,每当您的项目源更改以便该字段显示更改时,您需要重新运行添加列的循环吗? - Bhupendra
如果您知道所有可能的列,可以将它们添加到XAML中,并绑定这些列的可见性,以便在数据源中更改后可以反映出来。或者,您可以拥有自己的列集合,并将其绑定到视图的DP上,以便重新生成列。 - Bhupendra
事实上,对于我的情况,每次都必须重新填充整个网格,并且我不知道哪些列是动态的。 - Kervin Ramen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接