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
How do I show the contents of this array using DataGridView?
提问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: Col1
and Col2
. Col1
will be set to array index 0, and Col2
will 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 个字符串的数组。我们正在从这两个字符串中创建一个匿名类型。这种类型有两个属性:Col1
和Col2
。 Col1
将被设置为数组索引 0,Col2
并将被设置为数组索引 1。然后,我们正在为匿名类型的枚举构建网格。这看起来像:
You can of course define exactly how columns will be created by setting AutoGenerateColumns
to False, and populated the Columns
collection. 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();