2010-10-07 57 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

相關問題