当前位置:  开发笔记 > 编程语言 > 正文

以编程方式将列和行添加到WPF Datagrid

如何解决《以编程方式将列和行添加到WPFDatagrid》经验,为你挑选了4个好方法。

我是WPF的新手.我只想知道如何以编程方式将列和行添加到WPF中的DataGrid.我们过去常常在Windows窗体中执行此操作.创建表列和行,并将其绑定到DataGrid.

我相信WPF DataGrid与ASP.net和Windows形式中使用的有点不同(如果我错了,请纠正我).

我有需要在DataGrid中绘制的行数和列数,以便用户可以编辑单元格中的数据.



1> John Myczek..:

以编程方式添加一行:

DataGrid.Items.Add(new DataItem());

以编程方式添加列:

DataGridTextColumn textColumn = new DataGridTextColumn(); 
textColumn.Header = "First Name"; 
textColumn.Binding = new Binding("FirstName"); 
dataGrid.Columns.Add(textColumn); 

有关更多信息,请查看WPF DataGrid讨论板上的这篇文章.


-1:因为您显示了非常简单的部分,而不是如何将数据实际绑定到那些运行时添加的列.我确信Andy想要构建一个显示某种数据的应用程序,而不仅仅是列名.

2> 小智..:

试试这个,它100%工作:以编程方式添加列和行:首先需要创建项类:

public class Item
        {
            public int Num { get; set; }
            public string Start { get; set; }
            public string Finich { get; set; }
        }

        private void generate_columns()
        {
            DataGridTextColumn c1 = new DataGridTextColumn();
            c1.Header = "Num";
            c1.Binding = new Binding("Num");
            c1.Width = 110;
            dataGrid1.Columns.Add(c1);
            DataGridTextColumn c2 = new DataGridTextColumn();
            c2.Header = "Start";
            c2.Width = 110;
            c2.Binding = new Binding("Start");
            dataGrid1.Columns.Add(c2);
            DataGridTextColumn c3 = new DataGridTextColumn();
            c3.Header = "Finich";
            c3.Width = 110;
            c3.Binding = new Binding("Finich");
            dataGrid1.Columns.Add(c3);

            dataGrid1.Items.Add(new Item() { Num = 1, Start = "2012, 8, 15", Finich = "2012, 9, 15" });
            dataGrid1.Items.Add(new Item() { Num = 2, Start = "2012, 12, 15", Finich = "2013, 2, 1" });
            dataGrid1.Items.Add(new Item() { Num = 3, Start = "2012, 8, 1", Finich = "2012, 11, 15" });

        }



3> Bartek Dzień..:

我有同样的问题.向WPF添加新行DataGrid需要一个技巧.DataGrid依赖于项目对象的属性字段.ExpandoObject允许动态添加新属性.下面的代码解释了如何执行此操作:

// using System.Dynamic;

DataGrid dataGrid;

string[] labels = new string[] { "Column 0", "Column 1", "Column 2" };

foreach (string label in labels)
{
    DataGridTextColumn column = new DataGridTextColumn();
    column.Header = label;
    column.Binding = new Binding(label.Replace(' ', '_'));

    dataGrid.Columns.Add(column);
}

int[] values = new int[] { 0, 1, 2 };

dynamic row = new ExpandoObject();

for (int i = 0; i < labels.Length; i++)
    ((IDictionary)row)[labels[i].Replace(' ', '_')] = values[i];

dataGrid.Items.Add(row);

//编辑:

请注意,这不是组件应该如何使用的方式,但是,如果您只有编程生成的数据(例如,在我的情况下:一系列功能和神经网络输出),它会简化很多.



4> JohnB..:

我找到了一个在运行时添加列的解决方案,并绑定到DataTable.

如何将WPF DataGrid绑定到可变数量的列?

不幸的是,有47列以这种方式定义,它不能足够快地绑定到数据上.有什么建议?

XAML



xaml.cs 使用System.Windows.Data;

if (table != null) // table is a DataTable
{
  foreach (DataColumn col in table.Columns)
  {
    dataGrid.Columns.Add(
      new DataGridTextColumn
      {
        Header = col.ColumnName,
        Binding = new Binding(string.Format("[{0}]", col.ColumnName))
      });
  }

  dataGrid.DataContext = table;
}


为什么在绑定路径中使用"[{0}]"?它对我不起作用,但是当我只使用没有正方形和曲线的名称时它会起作用吗?
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有