2012-07-23 103 views
0

我在wpf應用程序中創建了一個datagrid(拖放)。然後我通過屬性窗口手動添加列。以編程方式添加DataGrid Row?

我想現在通過我的代碼後面添加行到這個數據網格。我本來以爲你會做一個

DataGridRow row = new DataGridRow(); 

,然後通過也許Items.Add()或東西,你會增加你的價值(每列)。

我沒有看到這個,所以我想知道我該怎麼做。

我知道我應該像數據綁定和東西,但我新來wpf和​​我正在做一個快速和骯髒的應用程序,我寧願只用一個forloop和手動進行行。

我寧願回來,重構該地區,如果我也曾經感受到這個願望。我真的只是想要我正在編造和運行,所以我可以使用它的ASP。

回答

1

一行是一個對象,這些值是所述對象上的屬性。你不應該自己創建容器(DataGridRow),DataGrid可以爲你做。只需將數據對象直接添加到Items(或作爲ItemsSource設置的集合,它應該實現INotifyCollectionChanged(例如ObservableCollection<T>))。這些列應該綁定數據對象上的屬性,默認情況下它們是從數據自動創建的。


在迴應評論:使用DisplayNameAttribute你可以得到的空間了頭很容易,但你需要的屬性添加到所有有問題的性質:

[DisplayName("Full Name")] 
public string FullName { get; } 

然後訂閱DataGrid.AutoGeneratingColumn ( - 哦,還有在文檔這個問題哈克的解決方案 - ):

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    var descriptor = (MemberDescriptor)e.PropertyDescriptor; 
    //Takes the value from the attribute if exists & non-default-value, else property name. 
    e.Column.Header = descriptor.DisplayName; 
} 

難的方法將是一個算法只是分裂電子正確地存在標題字符串(需要考慮pascal外殼,數字和縮寫,可能不太容易獲得100%的準確性)。

+0

你可以舉個例子。我不明白爲什麼我不能手動排隊。我有一個對象的一些屬性,我做了dg.Items.Add(test);並加載了行,但沒有在那裏。所以不知道它是否無法找出列名和綁定,因爲它們有點不同或什麼)。 – chobo2 2012-07-24 01:31:36

+0

我想也使用我的列表集合與ItemSource但所有我在我的數據網格空行 – chobo2 2012-07-24 01:47:58

+0

@ chobo2:屬性需要公開以及,你也有[屬性](http://msdn.microsoft.com。 com/en-us/library/x9fsa0sw.aspx)(而不是[fields](http://msdn.microsoft.com/en-us/library/ms173118.aspx)),對吧?如果生成的列取決於['AutoGenerateColumns'](http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.autogeneratecolumns.aspx)(默認爲true)。有關如何手動設置它們的示例,請閱讀專欄文檔。閱讀DataGrid的文檔以及任何您可以找到的內容,**它有助於**。 – 2012-07-24 01:56:35

相關問題