【问题标题】:Can I programmatically add a row to a WPF datagrid?我可以以编程方式将一行添加到 WPF 数据网格吗?
【发布时间】:2011-04-22 07:28:19
【问题描述】:

我只想添加一个新行,我的数据源位于我需要在其中进行一些处理的对象中。对于 wpf 数据网格,我需要类似下面的内容...

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

【问题讨论】:

  • 我尝试将数据表绑定到项目源,它可以工作,但标题、可见性和其他与 wpf 数据网格的映射不正确。我尝试了一个字典列表,其中我希望键是列,值是行值,但这不起作用。我的想法快用完了,网络上的所有资源都带有静态列..
  • 我的数据源在显示前需要处理的对象中,无法直接绑定。
  • 我不能只将它绑定到我创建的带有动态列的对象上??

标签: wpf datagrid


【解决方案1】:

您应该使用ObservableCollection<NavItem> 作为数据网格源。然后只需向您的集合中添加一个新元素即可将其添加到数据网格中。

看到这个MSDN article

【讨论】:

    【解决方案2】:

    我不知道这是否是正确的解决方案,但我绝望地想出了这样的事情:

    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);
      }
    

    然后我将数据表添加为 itemssource:

      this.dataGridLines.ItemsSource = dataTable.DefaultView;
    

    如果我直接设置数据表,它不关心数据表中的列并自动生成自己的列,不知道为什么..

    【讨论】:

    • 还需要设置:AutoGenerateColumns为false;
    • 因此,每次您的项目来源按该字段顺序更改时。显示更改需要重新运行循环以添加列?
    • 如果您知道可以拥有的所有列,那么您可以在 XAML 中添加这些列并绑定这些列的可见性,以便如果在数据源中它稍后发生更改,则可以反映它。或者,您可以拥有列集合并将其绑定到可以重新生成列的视图的 DP。
    • 事实上,对于我的情况,我每次都必须重新填充整个网格,而且我不知道哪些列是动态的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多