Datagrid动态添加数据

时间:2014-01-15 12:36:59

标签: c# wpf datagrid

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

我有一个XElement array,我想要循环foreach并在DataGrid中添加项目 成功添加后,有任何方法可以为ID行分配DataGrid,所以当我点击行时,我可以获得指定行的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>

我试过的代码,在Grid中添加空行:

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 个答案:

答案 0 :(得分:1)

不是使用代码向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的数据项。