2010-10-07 56 views
3

我只是想添加一个新的行,我有我的数据源在我需要做一些处理的对象。我需要像下面的WPF数据网格...我可以以编程方式将行添加到WPF数据网格吗?

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

你为什么不你的数据源绑定到WPF DataGrid的ItemsSource时,然后当你的数据源进行更新(如新行被添加)它将在WPF datagird被添加。 – whoisthis 2010-10-07 11:05:09

+0

我试图将数据表绑定到itemssource,它可以工作,但标题,可见性和其他与wpf数据网格的映射不正确。我尝试了一个字典列表,其中我想要的关键是列和值的行值,这是行不通的。我用完了网络上的所有资源,都是静态列。 – 2010-10-07 15:29:33

+0

我的数据源位于显示前需要处理的对象,我无法直接绑定它。 – 2010-10-07 16:02:39

回答

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

然后我添加数据表作为的ItemsSource:

this.dataGridLines.ItemsSource = dataTable.DefaultView; 

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

+0

您还需要设置:对的AutoGenerateColumns假; – 2010-10-08 06:56:06

+0

因此,每当您的项目源更改以便field.Show更改时,您需要重新运行循环以添加列? – whoisthis 2010-10-12 16:25:29

+0

如果您知道所有可以使用的列,那么可以将它们添加到XAML中,并绑定这些列的可见性,这样如果数据源中的数据源稍后发生了更改,则可以反映出来。或者,您可以拥有自己的列集合并将其绑定到可以重新生成列的视图的DP。 – whoisthis 2010-10-13 04:07:01

3

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

看到这个MSDN article

相关问题