如何将锯齿状的字符串数组绑定到C#中的DataGrid?

我在C#中有一个锯齿状的字符串数组。

如何将其绑定到DataGrid,以便我可以看到数组的内容?

目前在DataGrid中,而不是数组的内容,我看到一个列“长度”,“长度”,“秩”,“SyncRoot”等…基本上,数组的属性,而不是数据的内容arrays。

我的代码:

string[][] jagged = new string [100][]; //...jagged array is populated... dataGridView1.DataSource = jagged; 

这是一个例子,您可以尝试以下我没有使用String []但您可以获得Idea

 // // 1. Create two dimensional array // const int dim = 1000; double[,] array = new double[dim,dim]; Random ran = new Random(); for(int r = 0; r < dim; r++) { for(int c = 0; c < dim; c++) { array[r,c] = (ran.Next(dim)); // fill it with random numbers. } } // 2. Create ArrayDataView class in which // constructor you pass the array // and assign it to DataSource property of DataGrid. dataGrid1.DataSource = new ArrayDataView(array); 

对于String [] []这是一个例子

 string[][] arr = new string[2][]; arr[0] = new String[] {"a","b"}; arr[1] = new String[] {"c","d"}; DataGrid1.DataSource = arr[0]; DataGrid1.DataBind();//The result is: a,b in datagrid 

用LinQ看看这个

 List names = new List(new string[] { "John", "Frank", "Bob" }); var bindableNames = from name in names select new {Names=name}; dataGridView1.DataSource = bindableNames.ToList(); 

使用LINQ进行多维数组

 string[][] stringRepresentation = ds.Tables[0].Rows .OfType() .Select(r => ds.Tables[0].Columns .OfType() .Select(c => r[c.ColumnName].ToString()) .ToArray()) .ToArray(); 

正如当前接受的答案和Michael Perrenoud在评论中所提到的那样,您可以使用Mihail Stefanov的ArrayDataView类来实现此绑定。 然而,他的原始代码最初被设想为仅适用于多维数组。 我已经修改了他的代码以使用锯齿状数组,并通过Accord.NET Framework使其可用。

现在,您不需要使用整个框架来执行此操作,您只需使用此处提供的更新类即可 。 将这些类合并到项目中后,您所要做的就是

 dataGridView.DataSource = new ArrayDataView( yourArray ); 

我希望这一澄清有所帮助。

正如我所提到的,我是Accord.NET的作者,但最初的功劳归功于Stefanov。