Программная привязка DataGrid к массиву списков - PullRequest
3 голосов
/ 30 июля 2011

У меня есть список данных:

List<string[]> dataRow = new List<string[]>();
  1. каждый массив string [] заполнен 30 данными для каждой строки.
  2. Имя столбца уже существует.

Я пытаюсь отобразить это так:

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 Ответ

4 голосов
/ 30 июля 2011

Элемент управления DataGrid не поддерживает привязку к двумерным массивам, List<List..>> и т. Д.

См. Этот вопрос: Как заполнить сетку WPF на основе двумерного массива

Я создал подкласс DataGrid ( DataGrid2D ), чтобы добиться этого некоторое время назад.

Чтобы использовать его, просто добавьте ссылку на 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...