如何以编程方式设置模板和填充WPF DataGrid的内容?

时间:2016-08-10 14:10:50

标签: c# wpf xaml templates datagrid

我需要以编程方式从DataTable填充WPF DataGrid。列的列表在设计时不知道。

应该基于具有单个Label的简单模板手动生成列(AutoGeneratingColumn事件?)。 Label.Content是列名。现在绑定允许 - 模板可以在XAML中创建,但其他一切都需要在C#

有点复杂的方法是行。数据单元格模板应具有单个Label或TextBox,但应在运行时设置单元格模板。例如,字符串应该在单元格中表示长度为5个字符,然后应该使用基于标签的模板。否则,应使用TextBox模板。 同样,只能在XAML中创建模板。填写数据需要在C#

中完成

这里有一些代码可以开始生成数据:

DataTable myTable = new DataTable(tableName);
myTable.Columns.Add(new DataColumn("id", typeof(int)));  
myTable.Columns.Add(new DataColumn("name", typeof(string)));
myTable.Rows.Add(new object[] {1, "label"});   
myTable.Rows.Add(new object[] {2, "text box"});

1 个答案:

答案 0 :(得分:0)

您可以通过定义DataGridTextColumn以编程方式在数据网格中添加列,并设置其宽度,标题和绑定。

这是一个让你了解

的小例子
DataGridTextColumn column1 = new DataGridTextColumn();
column1.Header = myTable.Columns[0].Caption;
column1.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
column1.Binding = new Binding("column1_name");

DataGridTextColumn column1 = new DataGridTextColumn();
column1.Header = myTable.Columns[1].Caption;
column1.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
column1.Binding = new Binding("column2_name");

dataGrid.Columns.Add(column1);
dataGrid.Columns.Add(column2);

使用这种方式,您可以在datagrid中定义多个列,而无需在设计时知道no.of列