2011-07-30 135 views
3

我有列出到數據列表:編程綁定數據網格陣列

List<string[]> dataRow = new List<string[]>(); 
  1. 每串[]數組充滿與每行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

你有什麼嘗試用線'MyDataGrid.ItemsSource = MyDataGrid' – thumbmunkeys

+0

實現哦對不起!它是dataRow – trouble

+1

這不是在你的解決方案中的數據綁定。 –

回答

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,二維數組或一維數組這樣

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

由於dataRow是一個字段a不是屬性綁定將不起作用,但只是在後面的代碼中設置ItemsSource2D將足以顯示它

MyDataGrid.ItemsSource2D = dataRow;