2013-03-01 6 views
6

Ho creato una matrice bidimensionale di stringhe e l'ho popolata. Io cerco di associarlo a un controllo DataGrid in questo modo:Come faccio a mostrare il contenuto di questo array usando DataGridView?

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

Invece di vedere i contenuti della matrice compaiono i seguenti colonne: Lunghezza, LongLenth, Rank, SyncRoot, IsReadOnly, IsFixedSize, IsSyncrhonized.

Quindi, invece di visualizzare il contenuto del mio array, visualizza le proprietà dell'array. Che cosa ho fatto di sbagliato?

+0

come si aspetta di vedere che informazioni nel GV? –

+0

Che aspetto ha XAML per il controllo DataGrid? – ryrich

+0

Per [x] [y] speravo che ogni riga rappresentasse la [X] ... e le colonne rappresentassero [Y], in modo che il contenuto di [2] [5] fosse visualizzato sul Datagrid nel 2a riga, 5 colonne. – phan

risposta

3

Quando si consente al controllo della griglia di generare automaticamente le colonne, esso enumera sostanzialmente le proprietà di tale oggetto e crea una colonna per ciascuna di esse. Non ha modo di sapere che vuoi mostrarlo come una griglia di valori di array.

È necessario creare un nuovo oggetto (come un elenco enumerabile di una classe) fuori dall'array con le proprietà a cui si desidera associare come colonne. Un modo rapido per farlo sarebbe quello di utilizzare un tipo anonimo, creato utilizzando una query LINQ. Qualcosa di simile:

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

Qui, stiamo iterando attraverso tutti i 100 elementi dell'array. Ogni elemento è una matrice di 2 stringhe. Stiamo creando un tipo anonimo da quelle due stringhe. Questo tipo ha due proprietà: Col1 e Col2. Col1 verrà impostato sull'indice di matrice 0 e Col2 verrà impostato sull'indice di matrice 1. Quindi, stiamo creando la griglia per quell'enumerazione di tipi anonimi. Questo avrà un aspetto simile:

enter image description here

Ovviamente si può definire esattamente come le colonne verranno creati impostando AutoGenerateColumns su False, e popolato la collezione Columns. Questo può essere fatto in modo dichiarativo all'interno del tuo file ASPX.

2

è necessario convertire l'array ad un 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; 
0

Si potrebbe fare qualcosa di simile

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

Vedi questo link Binding Arrays to GridView in ASP.Net

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

Questi comandi cercano un testo nelle colonne 1 e 2 dell'array e restituiscono portando le colonne 1, 2 e 3 dell'array e ordinandoli in base alla colonna 3 convertiti da stringa a numero. –