2014-01-15 88 views
0

我是WPF的新手,並試圖將行添加爲DataGrid中的數據,我嘗試了以下代碼,它添加了行但不顯示行中的文本。Datagrid動態添加數據

我有我想要循環foreachDataGrid 併成功加入後添加項目的XElement array有什麼辦法來分配IDDataGrid行所以當我點擊一行,我能得到ID爲指定了哪些行。請指導。

(編輯)的XElement數組包含XML

[0] => <objective id="1" title="obj 1"> </objective> 
[1] => <objective id="2" title="obj 2"> </objective> 
[2] => <objective id="3" title="obj 3"> </objective> 

代碼,我試過了,在電網增加了空行:

var datagridTopic = new DataGrid {Width = 400, IsReadOnly = true}; 
//I only need one column 
datagridTopic.Columns.Add(new DataGridTextColumn() 
{ 
    Header = "Topic", 
    Width = datagridTopic.Width - 8 //after adding rows the grid gets scroll, so made column width lower 
}); 

datagridTopic.Items.Add("obj 1"); 
datagridTopic.Items.Add("obj 2"); 
StackPanelContent.Children.Add(datagridTopic); 

我想要做的是:

foreach (var element in XElement) 
{ 
    string title = element.Attributes("title").ElementAt(0).Value; // obj 1 
    datagridTopic.Items.Add(title); 
} 

回答

1

不要使用代碼將數據添加到數據網格,而是嘗試將其與您擁有的數據源。

var datagridTopic = new DataGrid {Width = 400, IsReadOnly = true}; 
//I only need one column 
var column1 = new DataGridTextColumn() 
{ 
    Header = "ID", 
    Width = datagridTopic.Width - 8 //after adding rows the grid gets scroll, so made column width lower 
}; 
column1.Binding = new Binding("ID") 
datagridTopic.Columns.Add(column1); 

var column2 = new DataGridTextColumn() 
{ 
    Header = "Title", 
    Width = datagridTopic.Width - 8 //after adding rows the grid gets scroll, so made column width lower 
}; 
column2.Binding = new Binding("Title") 
datagridTopic.Columns.Add(column2); 

var items = xElementArray.Select(x => new { ID= x.Attribute("id").Value, Title = x.Attribute("title").Value}); 


datagridTopic.ItemsSource = items; //set the data source for the grid to custom created items. 

StackPanelContent.Children.Add(datagridTopic); 

如果您不想在網格中顯示ID,則不要添加ID列,只添加Title列。您將不得不爲行實現MouseDown事件,並在該行中找到該行的DataContext,該行將成爲您的數據項,您可以從中獲取該ID。

+0

對不起,我已更新我的問題PLZ檢查。你的解決方案無法正常工作bcoz我沒有任何列名要放入綁定構造函數。我有XML XElemets我從中查詢並把網格 – ADi

+0

嗨根據您的更新,我也更新了我的代碼。您可以在您的XElement數組中使用linq來創建一個新的匿名對象集合,您可以將其與數據網格綁定。 –

+0

非常感謝,我不知道該怎麼做。非常感謝。我可以將'id'作爲'tag'作爲'row'並且僅將'title'作爲文本分配給row?所以當我點擊這一行時,我可以得到'id'作爲參考? – ADi