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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15166132/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-10 14:19:40  来源:igfitidea点击:

How do I show the contents of this array using DataGridView?

c#arraysvisual-studio-2010datagridview

提问by phan

I created a 2 dimensional array of strings and populated it. I try to bind it to a DataGrid control like so:

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

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

Instead of seeing the contents of the array I see the following columns: Length, LongLenth, Rank, SyncRoot, IsReadOnly, IsFixedSize, IsSyncrhonized.

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

So instead of displaying the contents of my array, it displays the properties of the array. What did I do wrong?

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

采纳答案by Mike Christensen

When you allow the grid control to auto-generate columns, it will basically enumerate through the properties of that object and create a column for each one. It has no way to know that you want to display this as a grid of array values.

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

You'll need to create a new object (such as an enumerable list of a class) out of the array with the properties you want to bind to as columns. A quick way to do this would be to use an anonymous type, built using a LINQ query. Something like:

您需要从数组中创建一个新对象(例如类的可枚举列表),其中包含要绑定为列的属性。一种快速的方法是使用匿名类型,使用 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();

Here, we're iterating through all 100 elements of the array. Each element is an array of 2 strings. We're creating an anonymous type out of those two strings. This type has two properties: Col1and Col2. Col1will be set to array index 0, and Col2will be set to array index 1. Then, we're building the grid to that enumeration of anonymous types. This will look something like:

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

enter image description here

在此处输入图片说明

You can of course define exactly how columns will be created by setting AutoGenerateColumnsto False, and populated the Columnscollection. This can be done declaratively as well within your ASPX file.

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

回答by Michiel

You need to convert your array to a datatable

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

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;

回答by syed mohsin

You could do something like this

你可以做这样的事情

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(); 

See this link Binding Arrays to GridView in ASP.Net

请参阅此链接将数组绑定到 ASP.Net 中的 GridView

回答by Paulo César Ferreira

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();