如何将锯齿状的字符串数组绑定到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。