2012-03-20 95 views
0

好吧,我一直在爲這一天的好時光撓頭,Google一直沒有什麼幫助,我的同事項目夥伴也無法解決它我們距離我們的最後期限還不到一天。幫助我們奧比一個#1,你是我們唯一的希望:將數據添加到WPF中的動態數據網格

我有一個由變量類型的列可變數目(DataGridTextColumn,DataGridComboBoxColumn,DataGridCheckBoxColumn)

的DataGrid和我需要綁定數據給他們。

這些列中的每一列都代表數據庫查詢,這是網格必須非常靈活的原因。我需要幫助的是如何綁定數據並將其添加到代碼隱藏部分中的這些列。

編輯 看來我忘了說清楚:有些列將包含相同類型的數據(在我們的例子中:「等級」)。根據這個對象的子類型,我們需要一個不同類型的列。因此,網格將有n列,其中一些列必須綁定到相同類型的數據。

編輯完

我不能設計一個容器類,它有一個屬性爲每個列,因爲它們動態變化,從我讀過,我不能綁定列陣列的不同指數,和我的最後一個方法是將不同的列綁定到代表數據類型的字符串(「checkbox」,「string」,「combobox」),然後只添加一個具有該名稱屬性的容器個別欄目。我無法找到一種方法來做到這一點,因爲似乎沒有一個「添加」方法來調用網格的列! 要一廂情願碼總結一下我需要的是一些看起來像這樣:

//Create an arbitrary number of columns 
for(int i = 0; i < NR_CHECKBOXES; ++i) { 
    DataGridCheckBoxColumn col = new DataGridCheckBoxColumn(); 
    col.Header = titles[i]; 
    //which are bound to a container with correct type of data 
    col.Binding = new Binding("checkboxes[" + i + "]"); 
    grid.Columns.Add(col); 
} 

grid.Add(checkboxes); //and then populate the grid 

或者是這樣的:

//Create an arbitrary number of columns 
for(int i = 0; i < NR_CHECKBOXES; ++i) { 
    DataGridCheckBoxColumn col = new DataGridCheckBoxColumn(); 
    col.Header = titles[i]; 
    col.Binding = new Binding("Data"); 
    col.Add(checkboxes[i]); //Populate the column specifically 
    grid.Columns.Add(col); 
} 

其中複選框是具有財產「數據對象的列表'(對不起,無法通過按Tab鍵然後按$進行編譯,可能是因爲我在瑞典語鍵盤上)。 然後將針對每種類型的列和數據(ComboBoxes和TextBoxes)複製這些循環。

我希望這足以解釋我的問題,並且有人知道在WPF中實現這一點的正確方法。

回答

0

使用數據模板。將每個查詢轉換爲特定類型併爲該類型指定一個數據模板。您可以添加您想要的所有類型的XAML屬性。 WPF將根據類型選擇正確的模板。

DataTemplates

+0

那不是仍然給我的問題時,有相同類型的多個列?是的,它會選擇正確的模板,但它會選擇正確的該類型的數據集? – Glader 2012-03-20 14:49:12

+0

編輯我的原始問題。 – Glader 2012-03-20 15:27:02

0

好吧,我看到你的結果集是非常動態的。你可以通過在運行時創建一個DataTemplate來獲得你想要的嗎?

Creating a DataTemplate at runtime

+0

我不這麼認爲,至少不是如果我必須將列綁定到屬性(必須在編譯時命名)。 – Glader 2012-03-20 20:37:24