C# Datagrid动态添加数据

C# Datagrid动态添加数据,c#,wpf,datagrid,C#,Wpf,Datagrid,我是WPF新手,尝试在DataGrid中添加行作为数据,我尝试了以下代码,它添加行但不显示行中的文本 我有一个XElement数组,我想从中循环foreach,并在DataGrid 成功添加后,是否有任何方法将ID分配给DataGrid的行,这样当我单击row时,就可以获得指定行的ID。请导游 (编辑)包含XML的XElement数组 [0] => <objective id="1" title="obj 1"> </objective> [1] => <

我是WPF新手,尝试在
DataGrid
中添加行作为数据,我尝试了以下代码,它添加行但不显示行中的文本

我有一个
XElement数组
,我想从中循环
foreach
,并在
DataGrid
成功添加后,是否有任何方法将
ID
分配给
DataGrid
的行,这样当我单击row时,就可以获得指定行的
ID
。请导游

(编辑)包含XML的XElement数组

[0] => <objective id="1" title="obj 1"> </objective>
[1] => <objective id="2" title="obj 2"> </objective>
[2] => <objective id="3" title="obj 3"> </objective>
我想做的是:

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

不要使用代码将数据添加到datagrid,而是尝试将其与您拥有的数据源绑定

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列,只添加标题列。您必须为行执行MouseDown事件,在该行中,您将找到该行的DataContext,它将是您可以从中获取ID的数据项。

很抱歉没有清除,我已更新了我的问题plz检查。您的解决方案无法工作,因为我没有任何列名称放入绑定构造函数中。我有XML XElemets,从中我有o查询,并根据您的更新放入gridHi,我还更新了我的代码。您可以将linq与XElement数组一起使用,创建一个新的匿名对象集合,您可以将其与数据网格绑定。非常感谢,我不知道该怎么做。非常感谢。我是否可以将
id
指定为
行的
标记
,并仅将
标题
指定为行的文本?因此,当我单击行时,我可以获取
id
以供参考?@Nithin Joshi您能告诉我如何按照您的代码plz进行操作吗
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);