如何使用DataGridView显示此数组的内容?

时间:2013-03-01 20:16:11

标签: c# arrays visual-studio-2010 datagridview

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

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

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

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

4 个答案:

答案 0 :(得分: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.然后,我们将网格构建为匿名类型的枚举。这看起来像是:

enter image description here

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

答案 1 :(得分: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;

答案 2 :(得分: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

答案 3 :(得分: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();