Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

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.

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

like image 718
phan Avatar asked Mar 01 '13 20:03

phan


2 Answers

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:

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:

enter image description here

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.

like image 133
Mike Christensen Avatar answered Nov 03 '22 12:11

Mike Christensen


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;
like image 29
Michiel Avatar answered Nov 03 '22 11:11

Michiel