2012-03-07 42 views
7

Tengo DataGridView lleno de datos de origen de datos (SQL). Ahora quiero añadir una fila nueva, pero no puedo, porque los nuevos datos no se pueden agregar a DataGridView acotada ...¿Cómo agregar una nueva fila a datagridview?

yo estaba tratando de:

dataGridView1.Source = null; 
dataGridView1.Rows.Add("1"); 

pero borra mi anterior datos en la tabla. ¿Cómo hacerlo? ¿Agregar una nueva fila sin eliminar los datos anteriores?

Respuesta

5

Cuando se establece el DataSource property a null, que está eliminando esencialmente todos los datos de la DataGridView (puesto que no sabe lo que se una a más).

Tiene dos opciones aquí. El primero es actualizar la fuente de datos subyacente. Supongamos que es un DataTable. En este caso, usted haría algo como:

DataTable dt = dataGridView1.Source as DataTable; 
dt.Rows.Add(new object[] { ... }); 

Y entonces el DataGridView se darán cuenta de los cambios (tenga en cuenta que si no son vinculantes a algo que no implementa la INotifyCollectionChanged interface, tendrá llamar al ResetBindings method para obtener la cuadrícula para actualizar).

La otra opción es dejar que el DataGridView administre las filas. Puede hacer esto añadiendo manualmente cada elemento con el Add method en el DataGridViewRowCollection devuelto por el Rows property:

foreach (var item in source) 
{ 
    dataGridView1.Rows.Add("1", "2", "3", ...); 
} 

Yo no diría que la segunda solución es óptima , pero funcionará.

Finalmente, suponiendo que está vinculando a DataTable (o alguna otra materialización de los datos de una fuente de datos subyacente), esto no hace nada para actualizar la fuente de datos subyacente (que sería una pregunta separada).

1

La respuesta corta es que no.

Cuando configura su DataSource como nulo, ha roto el vínculo entre su DataGridView y su fuente de datos, por lo que sus datos no se conservarán. No puede agregar una fila a un límite DataGridView porque se supone que representa el estado del DataSource subyacente; en realidad está pidiendo .net para hacer que su tabla no esté sincronizada con su tienda de respaldo, en primer lugar, derrotando el propósito de la unión de datos.

Si desea agregar una fila a la tienda de respaldo, debe agregar una fila en el DataSource, no en el DataGridView.

+0

Tnx, ¿me puede mostrar cómo agregar una fila a mi DataSource? Tengo otra DataGridView con datos que me gustaría agregar a mi primer GridView. – Bodi

+0

Si su backing store es una tabla SQL, me imagino que simplemente haría un INSERT en esa tabla. –

+0

No es de SQL ... algunos de mis datos se generan para agregarlos a la primera tabla e imprimirlos;) – Bodi

0

tal vez desee hacerlo de forma manual y detallada? ¿Algo como esto?

 DataSet ds = new DataSet(); 
     OleDbDataAdapter adapter = null; 
     adapter = new OleDbDataAdapter("SELECT * FROM WHERE", conn); 
     adapter.Fill(ds); 
     dataGridView1.ColumnCount = 5; //how many columns returns your SQL query? starts with 0 

     dataGridView1.Columns[0].Name = "COl-1"; 
     dataGridView1.Columns[1].Name = "COl-2"; 
     dataGridView1.Columns[2].Name = "COl-3"; 
     dataGridView1.Columns[3].Name = "COl-4"; 
     dataGridView1.Columns[4].Name = "COl-5"; 

     DataTable dt = ds.Tables[0]; 

     foreach (DataRow dr in dt.Rows) 
     { 
      dataGridView1.Rows.Add(
      (dr["COL_HEADER_NAME1"].ToString()), 
      (dr["COL_HEADER_NAME2"].ToString()), 
      (dr["COL_HEADER_NAME3"].ToString()), 
      (dr["COL_HEADER_NAME4"].ToString()), 
      (dr["COL_HEADER_NAME5"].ToString())); 
     } 
0

Usted acaba de añadir filas utilizando añadir método de recolección de filas

me.datagridview1.rows.add("first","second","third"); 

Usted puede agregar cualquier cantidad de artículos con la colección de matriz.

Cuestiones relacionadas