【问题标题】:How do I bind a jagged array of strings to a DataGrid in C#?如何在 C# 中将锯齿状的字符串数组绑定到 DataGrid?
【发布时间】:2012-09-28 18:01:36
【问题描述】:

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

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

当前在 DataGrid 中,而不是数组的内容,我看到一个列显示“长度”、“长长度”、“等级”、“同步根”等......基本上,数组的属性而不是数组的内容。

我的代码:

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

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

dataGridView1.DataSource = jagged;  

【问题讨论】:

标签: c# visual-studio-2010


【解决方案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();

【讨论】:

  • 这个 ArrayDataView 类似乎是我正在寻找的关键。但是由于我的理解不足,我不知道如何实施 cmets 建议我做的事情。你有你说的这个类的代码吗?
  • @phan:ArrayDataView 是一个开源库,您可以在这里找到code.google.com/p/accord/source/browse/trunk/Sources/…
  • 你熟悉LINQ吗?如果是这样,我可以使用 linq 粘贴一个简单的示例
  • @DJ KRAZE 嗨 DJ,我正在查看您的 LINQ 示例,但这只是一个简单的一维列表。您将如何在锯齿状数组的列表等效项上实现您的 LINQ 解决方案? (列表列表?)
  • 看看我刚刚附加到我的示例列表中的示例并更改它以适合您的用例..
【解决方案2】:

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

现在,您不需要使用整个框架来执行此操作,只需使用 updated classes available here。将这些类合并到您的项目中后,您所要做的就是

dataGridView.DataSource = new ArrayDataView( yourArray );

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2021-12-14
    • 2019-08-19
    • 2013-05-28
    • 2014-01-23
    相关资源
    最近更新 更多