我创建了一个二维字符串数组并填充了它。我尝试将它绑定到 DataGrid 控件,如下所示:
string[][] Array = new string[100][];
dataGridView.DataSource = Array;
我没有看到数组的内容,而是看到了以下列:Length、LongLenth、Rank、SyncRoot、IsReadOnly、IsFixedSize、IsSyncrhonized。
因此,它不是显示我的数组的内容,而是显示数组的属性。我做错什么了?
我创建了一个二维字符串数组并填充了它。我尝试将它绑定到 DataGrid 控件,如下所示:
string[][] Array = new string[100][];
dataGridView.DataSource = Array;
我没有看到数组的内容,而是看到了以下列:Length、LongLenth、Rank、SyncRoot、IsReadOnly、IsFixedSize、IsSyncrhonized。
因此,它不是显示我的数组的内容,而是显示数组的属性。我做错什么了?
当您允许网格控件自动生成列时,它将基本上枚举该对象的属性并为每个属性创建一个列。它无法知道您是否要将其显示为数组值的网格。
您需要使用要绑定为列的属性从数组中创建一个新对象(例如类的可枚举列表)。一种快速的方法是使用匿名类型,使用 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 个字符串的数组。我们正在用这两个字符串创建一个匿名类型。这种类型有两个属性:Col1
和Col2
。 Col1
将设置为数组索引 0,并将Col2
设置为数组索引 1。然后,我们将网格构建为匿名类型的枚举。这看起来像:
您当然可以通过设置为 False 来准确定义如何创建列AutoGenerateColumns
,并填充Columns
集合。这也可以在您的 ASPX 文件中以声明方式完成。
您需要将数组转换为数据表
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;
你可以做这样的事情
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();
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();