2011-03-19 21 views
6

之间结合我有一个名为数组:双向DataGrid和数组

string[,] TableData; 

我可以使用绑定一个DataGrid控件链接的内容?

如果可能,我希望用户能够编辑网格并反映数组中的更改。

回答

5

见这个问题:How to populate a WPF grid based on a 2-dimensional array

您可以使用this control调用DataGrid2Dsource code here)。要使用它只需添加到DataGrid2DLibrary.dll参考,添加此命名空间

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

,然后创建一个DataGrid2D并将其绑定到你的IList,二维数组或一维数组这样

<dg2d:DataGrid2D Name="dataGrid2D" 
       ItemsSource2D="{Binding Int2DList}"/> 

的用户将能够编辑数据和在DataGrid中所做的更改将反映在二维数组中

+0

@Thanks Meleak,我一直在阅读,但我有兴趣填充** DataGrid ** 2D数组,而不是网格的组件。 – 2011-03-19 14:52:23

+0

@Jaime Oro:更新了我的答案。我在以前的项目中有相同的要求,并创建了一个子类“DataGrid”,您可以尝试 – 2011-03-19 15:07:31

+0

完美地工作!感谢Genious! – 2011-03-19 15:42:25

2

您不能将矩阵绑定到DataGrid。但是,根据您要达到的目标,您可以将其转换为class的数组。

矩阵的内容是什么?你为什么不尝试这样的事情?

public class MyClass 
{ 
    public string A { get; set; } 
    public string B { get; set; } 

    public MyClass(string a, string b) 
    { 
     Debug.Assert(a != null); 
     Debug.Assert(b != null); 

     this.A = a; 
     this.B = b; 
    } 
} 

然后实例的东西如下:

MyClass[] source = { new MyClass("A", "B"), new MyClass("C", "D") }; 
this.dataGrid.ItemsSource = source; 

或者,如果你不能修改源的类型,请尝试使用LINQ项目是:

var source = (from i in Enumerable.Range(0, matrix.GetLength(0)) 
       select new MyClass(matrix[i, 0], matrix[i, 1])).ToList(); 
this.dataGrid1.ItemsSource = source; 
+0

这里的问题是我的矩阵可以有任何数量的列/行。 – 2011-03-19 14:26:33

+0

这对我很好 - 我有一个固定的列数。我使用索引器,所以我可以作为数组访问它或作为数据绑定列表。 – RaoulRubin 2011-06-21 20:51:32

+0

这只适用于你有一个列和行的静态数 – rolls 2016-11-20 19:55:22

1

最简单的方法应该是使用WPF Datagrid中的构建并将您的数组投影到将被绑定的View类。

你想让你的用户能够添加行吗?如果yes绑定到一个数组是不可能的,因为你不能添加行。

如果您有任意数量的列,您应该能够将您的数组投影到动态对象,并将DataGrid的AutoGenerateColumns属性设置为true。你的专栏有名字吗?

+0

我希望用户能够添加行和列。 Cols没有名字。 – 2011-03-19 15:27:47