2011-04-07 63 views
5

Estoy construyendo un programa con C#, y he incluido un componente datagridview en él. El Datagridview tiene una cantidad fija de columnas (2), que quiero guardar en dos matrices separadas. Sin embargo, la cantidad de filas cambia. ¿Cómo podría hacer esto?C# datagridview columna en una matriz

Respuesta

3

Prueba esto:

ArrayList col1Items = new ArrayList(); 
ArrayList col2Items = new ArrayList(); 

foreach(DataGridViewRow dr in dgv_Data.Rows) 
{ 
    col1Items.Add(dr.Cells[0].Value); 
    col2Items.Add(dr.Cells[1].Value); 
} 
+0

Después de obtener el error por primera vez al usar el código de Jay, lo probé, y realmente funcionó. Pero, si dices que Jay's es más eficiente, ¡probablemente seguiré experimentando! – Xedfire

11

Suponiendo un DataGridView llamado DataGridView1 y desea copiar el contenido de las dos primeras columnas en matrices de cadenas, se puede hacer algo como esto:

string[] column0Array = new string[dataGridView1.Rows.Count]; 
string[] column1Array = new string[dataGridView1.Rows.Count]; 

int i = 0; 
foreach (DataGridViewRow row in dataGridView1.Rows) { 
    column0Array[i] = row.Cells[0].Value != null ? row.Cells[0].Value.ToString() : string.Empty; 
    column1Array[i] = row.Cells[1].Value != null ? row.Cells[1].Value.ToString() : string.Empty; 
    i++; 
} 
+0

+1, probablemente un poco más eficiente. –

+0

@Abe, por supuesto, si estaba usando .NET 2.0+ recomendaríamos usar la Lista en lugar de una Matriz o una Lista de Arrays. –

+0

Verdadero de mi parte, pero tenía la impresión de que, si conoce la longitud de su colección de antemano, generalmente es mejor/más eficiente utilizar una matriz (aunque la ganancia de rendimiento puede no ser notable). –

3

Usé el ejemplo de Jay y lo cambié para almacenar todas las filas en una única matriz para exportar fácilmente. Al final se puede utilizar simplemente LogArray [0,0] para obtener la cadena de la celda 0, la columna 0.

 // create array big enough for all the rows and columns in the grid 
     string[,] LogArray = new string[dataGridView1.Rows.Count, dataGridView1.Columns.Count]; 

     int i = 0; 
     int x = 0; 
     foreach (DataGridViewRow row in dataGridView1.Rows) 
     { 
      while (x < dataGridView1.Columns.Count) 
      { 
       LogArray[i, x] = row.Cells[x].Value != null ? row.Cells[x].Value.ToString() : string.Empty; 
       x++; 
      } 

      x = 0; 
      i++; //next row 
     } 

espero que ayudó a alguien con esto, es mi primera vez publicar cualquier código en línea, cada vez . Además, no he codificado en años solo para comenzar de nuevo.

Cuestiones relacionadas