以编程方式将DataGrid绑定到List数组

时间:2011-07-30 10:49:03

标签: c# wpf data-binding

我必须列出数据:

List<string[]> dataRow = new List<string[]>();
  1. 每个string []数组都已满,每行有30个数据。
  2. 列名已存在。
  3. 我试图像这样显示它:

    XAML:

    <DataGrid Margin="8,259,8,8" IsReadOnly="True" AutoGenerateColumns="False" AlternatingRowBackground="Gainsboro"  AlternationCount="2" Name="MyDataGrid" />
    

    C#:

    MyDataGrid.ItemsSource = dataRow;
    
    foreach( string[] cellContent in dataRow )
    {
      foreach( string text in cellContent )
      {
        var column = new DataGridTextColumn
        {
          Binding = new Binding(text)
        };
        MyDataGrid.Columns.Add(column);
       }
     }
    

    但我收到了“ContextSwitchDeadlock”错误。我该如何解决这个问题?

    感谢你帮助

    编辑:已解决但未使用数据绑定方式

    我解决了这个问题:

    List<string> ColumnName = new List<string>();
    List<string[]> dataRow = new List<string[]>();
    DataTable myTable = new DataTable();
    
     // Fill Array ColumnName and dataRow Here
    
    foreach (string text in ColumnName)
    {
       myTable.Columns.Add(text);
    }
    foreach (string[] cellContent in dataRow)
    {
       myTable.Rows.Add(cellContent);
    }
    DatensatzGrid.ItemsSource = myTable.AsDataView();
    

    感谢所有回复!!

1 个答案:

答案 0 :(得分:4)

DataGrid控件不支持绑定到2D数组,List<List..>>等。

请参阅此问题:How to populate a WPF grid based on a 2-dimensional array

我创建了一个子类DataGridDataGrid2D)来实现这一目标。

要使用它,只需添加对DataGrid2DLibrary.dll的引用,添加此命名空间

xmlns:dg2d="clr-namespace:DataGrid2DLibrary;assembly=DataGrid2DLibrary"

然后创建一个DataGrid2D并将其绑定到IList,2D数组或1D数组,如下所示

<dg2d:DataGrid2D Name="MyDataGrid"
                 ItemsSource2D="{Binding DataRow}"/>

由于dataRow是一个字段,因此不是属性绑定不起作用,只是在代码中设置ItemsSource2D就足以显示它了

MyDataGrid.ItemsSource2D = dataRow;