6

我创建了一个二维字符串数组并填充了它。我尝试将它绑定到 DataGrid 控件,如下所示:

string[][] Array = new string[100][];
dataGridView.DataSource = Array;

我没有看到数组的内容,而是看到了以下列:Length、LongLenth、Rank、SyncRoot、IsReadOnly、IsFixedSize、IsSyncrhonized。

因此,它不是显示我的数组的内容,而是显示数组的属性。我做错什么了?

4

4 回答 4

3

当您允许网格控件自动生成列时,它将基本上枚举该对象的属性并为每个属性创建一个列。它无法知道您是否要将其显示为数组值的网格。

您需要使用要绑定为列的属性从数组中创建一个新对象(例如类的可枚举列表)。一种快速的方法是使用匿名类型,使用 LINQ 查询构建。就像是:

string[][] Array = new string[100][];
for(int i = 0; i < 100; i++) // Set some values to test
   Array[i] = new string[2] { "Value 1", "Value 2" };

dataGridView.DataSource = (from arr in Array select new { Col1 = arr[0], Col2 = arr[1] });
Page.DataBind();

在这里,我们遍历数组的所有 100 个元素。每个元素都是 2 个字符串的数组。我们正在用这两个字符串创建一个匿名类型。这种类型有两个属性:Col1Col2Col1将设置为数组索引 0,并将Col2设置为数组索引 1。然后,我们将网格构建为匿名类型的枚举。这看起来像:

在此处输入图像描述

您当然可以通过设置为 False 来准确定义如何创建列AutoGenerateColumns,并填充Columns集合。这也可以在您的 ASPX 文件中以声明方式完成。

于 2013-03-01T20:30:54.773 回答
2

您需要将数组转换为数据表

string[][] Array = new string[100][];
DataTable dt= new DataTable();

int l= Array.length;

for(int i=0;i<l;i++) {
     dt.LoadDataRow(Array[i], true); //Pass array object to LoadDataRow method
}

dataGridView.DataSource = dt;
于 2013-03-01T20:33:22.097 回答
0

你可以做这样的事情

string[][] Array = new string[100][];

ArrayList arrList = new ArrayList();
for(int i=0;i<100;i++)
{
    arrList.Add(new ListItem(Array[i, 0], Array[i, 1]));
}
Grid2D.DataSource = arrList;
Grid2D.DataBind(); 

请参阅此链接Binding Arrays to GridView in ASP.Net

于 2013-03-01T20:33:38.133 回答
0
using Linq;

var Found = (from arr in myArray2D select 
new { row1 = arr[0], row2 = arr[1], row3 = arr[2] })
.Where(y => (y.row1.ToUpper() + y.row2.ToUpper())
.Contains(sText.ToUpper()))
.OrderByDescending(y => Convert.ToInt32(y.row3)).ToList();
dataGridViewFind.DataSource = Found;
dataGridViewFind.AutoResizeColumns();
于 2017-03-21T23:59:32.337 回答