0

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

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

目前在 DataGrid 中,我看到的不是数组的内容,而是一个列,上面写着“长度”、“长长度”、“等级”、“同步根”等……基本上,是数组的属性,而不是数组的内容大批。

我的代码:

string[][] jagged = new string [100][];

//...jagged array is populated...

dataGridView1.DataSource = jagged;  
4

2 回答 2

1

这是一个示例,您可以尝试按照我没有使用 String[] 执行此操作,但您可以得到这个想法

//
// 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<string> names = new List<string>(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<DataRow>()  
    .Select(r => ds.Tables[0].Columns  
        .OfType<DataColumn>()  
        .Select(c => r[c.ColumnName].ToString())  
        .ToArray())  
    .ToArray();
于 2012-09-28T18:08:38.680 回答
0

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

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

dataGridView.DataSource = new ArrayDataView( yourArray );

我希望这个澄清会有所帮助。

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

于 2013-01-01T21:38:45.500 回答