【问题标题】:How to set template and fill content of WPF DataGrid programmatically?如何以编程方式设置 WPF DataGrid 的模板和填充内容?
【发布时间】:2016-08-10 14:10:50
【问题描述】:

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

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

有点复杂的方法是用于行。数据单元格模板应具有单个标签或文本框,但单元格模板应在运行时设置。例如,字符串应在单元格中表示超过 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"});

【问题讨论】:

    标签: c# wpf xaml templates datagrid


    【解决方案1】:

    您可以通过定义 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);
    

    使用这种方式,您可以在数据网格中定义多个列,而无需在设计时知道列数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 2014-09-16
      相关资源
      最近更新 更多