Cómo agregar una nueva fila a datagridview mediante programación


157

si agrega fila a DataTable

DataRow row = datatable1.NewRow();
row["column2"]="column2";
row["column6"]="column6";
datatable1.Rows.Add(row);

¿Qué tal DataGridView?


2
Puede agregar los datos de una tabla de datos a una vista de cuadrícula de datos simplemente configurando el origen de datos de la vista de cuadrícula igual a la tabla de datosdatagridview1.DataSource = yourDataTable
Jonathan Van Dam

Respuestas:


249

Tu puedes hacer:

DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells[0].Value = "XYZ";
row.Cells[1].Value = 50.2;
yourDataGridView.Rows.Add(row);

o:

DataGridViewRow row = (DataGridViewRow)yourDataGridView.Rows[0].Clone();
row.Cells["Column2"].Value = "XYZ";
row.Cells["Column6"].Value = 50.2;
yourDataGridView.Rows.Add(row);

De otra manera:

this.dataGridView1.Rows.Add("five", "six", "seven","eight");
this.dataGridView1.Rows.Insert(0, "one", "two", "three", "four");

De: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rows.aspx


28
gracias, si mi datagridview no tiene filas, ¿cómo puedo agregar una fila?
LK Yeung

3
@DavidYeung, en ese caso, la respuesta de MGA puede ayudarte, ¿cuál es tu fuente de datos? ¿Es una tabla de datos? si es así, puede agregar la fila a la tabla de datos y luego actualizar la fuente de datos
Habib

77
No puede hacer referencia directa a una columna por su nombre como lo hizo: row.Cells ["Column2"]. Value = "XYZ"; ... Primero debe buscar el índice: row.Cells [yourDataGridView.Columns ["Column2"]. Index] .Value = "XYZ";
Tizz

2
Idealmente, debe clonar el RowTemplatede DataGridView. Esto se convierte en un problema cuando tienes diferentes estilos en diferentes filas en el DataGridView.
Anthony

77
Después de leer unas 20 soluciones (encontradas por google), esta es la primera que entiendo.
C4d

50

Me gusta esto:

var index = dgv.Rows.Add();
dgv.Rows[index].Cells["Column1"].Value = "Column1";
dgv.Rows[index].Cells["Column2"].Value = 5.6;
//....

Gracias, esto funciona realmente bien si tiene una simple columna DataGridView para listas de texto editables simples.
Bob Moss

Funciona muy bien en el caso cuando no tiene una fuente de datos asignada a la vista de cuadrícula
Jhabar

Las filas no se pueden agregar mediante programación a la colección de filas de DataGridView cuando el control está vinculado a datos.
Darth Sucuk

39

Supongamos que tiene una vista de cuadrícula de datos que no está vinculada a un conjunto de datos y desea llenar nuevas filas mediante programación ...

Así es como lo haces.

// Create a new row first as it will include the columns you've created at design-time.

int rowId = dataGridView1.Rows.Add();

// Grab the new row!
DataGridViewRow row = dataGridView1.Rows[rowId];

// Add the data
row.Cells["Column1"].Value = "Value1";
row.Cells["Column2"].Value = "Value2";

// And that's it! Quick and painless... :o)

3
+1: esta es la única solución que realmente utiliza los nombres de columna definidos por datagridview.Columns.Add("columnname"), no necesita una tabla de datos y termina con una sonrisa
Roland

32

Me gusta esto:

 dataGridView1.Columns[0].Name = "column2";
 dataGridView1.Columns[1].Name = "column6";

 string[] row1 = new string[] { "column2 value", "column6 value" };
 dataGridView1.Rows.Add(row1);

O necesita establecer sus valores individualmente, use la propiedad .Rows(), así:

 dataGridView1.Rows[1].Cells[0].Value = "cell value";

1
gracias. si el datagridview tiene 30 columnas, pero solo quiero agregar el valor a column2 y column6 y el resto se mantiene nulo o vacío. ¿¿Cómo puedo hacer esto??
LK Yeung

1
@DavidYeung, Claro que puedes: dataGridView1.Rows[1].Cells[0].Value = "cell value";
Mahmoud Gamal

1
dataGridView.Rows.Add (nulo, 2, nulo, nulo, nulo, 6);
MrFox

int AddedRowIndex = dataGridViewRows.Add (); var AddedRow = dataGridViewRows [AddedRowIndex]; ahora todos los valores se rellenan con el valor predeterminado, solo tiene que cambiar las celdas que no son predeterminadas: AddedRow.Cells [column2.Index] .Value = myValue; (suponiendo que la columna2 es una DataGridViewColumn)
Harald Coppoolse

24

Agregar una nueva fila en un DGV sin filas con Add () provoca el evento SelectionChanged antes de que pueda insertar datos (o vincular un objeto en la propiedad Tag).

Crear una fila de clonación desde RowTemplate es más seguro:

//assuming that you created columns (via code or designer) in myDGV
DataGridViewRow row = (DataGridViewRow) myDGV.RowTemplate.Clone();
row.CreateCells(myDGV, "cell1", "cell2", "cell3");

myDGV.Rows.Add(row);

3
El método Clone () devolvió una fila pero sin Celdas. row.Cells.Count es 0.
MARKAND Bhatt

55
Markand: llame a DataGridViewRow.CreateCells para inicializar su colección de Celdas.
tono silencioso

Las filas no se pueden agregar mediante programación a la colección de filas de DataGridView cuando el control está vinculado a datos.
Darth Sucuk

10

Así es como agrego una fila si el dgrview está vacío: (myDataGridView tiene dos columnas en mi ejemplo)

DataGridViewRow row = new DataGridViewRow();
row.CreateCells(myDataGridView);

row.Cells[0].Value = "some value";
row.Cells[1].Value = "next columns value";

myDataGridView.Rows.Add(row);

Según los documentos: "CreateCells () borra las celdas existentes y establece su plantilla de acuerdo con la plantilla DataGridView suministrada".


2
Gracias, esto fue muy útil para mí, me faltaba el "row.CreateCells (myDataGridView)";
f4d0

Las filas no se pueden agregar mediante programación a la colección de filas de DataGridView cuando el control está vinculado a datos.
Darth Sucuk

8

Si la cuadrícula está vinculada a un DataSet / table, es mejor usar un BindingSource como

var bindingSource = new BindingSource();
bindingSource.DataSource = dataTable;
grid.DataSource = bindingSource;

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

aquí hay otra forma de hacer tal

 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        dataGridView1.ColumnCount = 3;

        dataGridView1.Columns[0].Name = "Name";
        dataGridView1.Columns[1].Name = "Age";
        dataGridView1.Columns[2].Name = "City";

        dataGridView1.Rows.Add("kathir", "25", "salem");
        dataGridView1.Rows.Add("vino", "24", "attur");
        dataGridView1.Rows.Add("maruthi", "26", "dharmapuri");
        dataGridView1.Rows.Add("arun", "27", "chennai"); 
    }

4

Si necesita manipular algo aparte de la cadena de valor de celda, como agregar una etiqueta, intente esto:

DataGridViewRow newRow = (DataGridViewRow)mappingDataGridView.RowTemplate.Clone();
newRow.CreateCells(mappingDataGridView);

newRow.Cells[0].Value = mapping.Key;
newRow.Cells[1].Value = ((BusinessObject)mapping.Value).Name;
newRow.Cells[1].Tag = mapping.Value;

mappingDataGridView.Rows.Add(newRow);

3
yourDGV.Rows.Add(column1,column2...columnx); //add a row to a dataGridview
yourDGV.Rows[rowindex].Cells[Cell/Columnindex].value = yourvalue; //edit the value

También puede crear una nueva fila y luego agregarla a DataGridView de esta manera:

DataGridViewRow row = new DataGridViewRow();
row.Cells[Cell/Columnindex].Value = yourvalue;
yourDGV.Rows.Add(row);

2

Si está vinculando una lista

List<Student> student = new List<Student>();

dataGridView1.DataSource = student.ToList();
student .Add(new Student());

//Reset the Datasource
dataGridView1.DataSource = null;
dataGridView1.DataSource = student;

Si está vinculando DataTable

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

// Add the row to the rows collection.
table.Rows.Add(newRow);

1

Un ejemplo de copiar fila de dataGridView y agregar una nueva fila en el mismo dataGridView:

DataTable Dt = new DataTable();
Dt.Columns.Add("Column1");
Dt.Columns.Add("Column2");

DataRow dr = Dt.NewRow();
DataGridViewRow dgvR = (DataGridViewRow)dataGridView1.CurrentRow;
dr[0] = dgvR.Cells[0].Value; 
dr[1] = dgvR.Cells[1].Value;              

Dt.Rows.Add(dR);
dataGridView1.DataSource = Dt;

1
//Add a list of BBDD
var item = myEntities.getList().ToList();
//Insert a new object of type in a position of the list       
item.Insert(0,(new Model.getList_Result { id = 0, name = "Coca Cola" }));

//List assigned to DataGridView
dgList.DataSource = item; 

¿Puede explicar cómo resolvería el problema?
Phani

1
//header
dataGridView1.RowCount = 50;
dataGridView1.Rows[0].HeaderCell.Value = "Product_ID0";


//add row by cell 
 dataGridView1.Rows[1].Cells[0].Value = "cell value";

1

Si ya has definido un DataSource, puedes obtener los DataGridView´s DataSourcey lanzarlo como unDatatable .

Luego agregue un nuevo DataRow y establezca los valores de los campos.

Agregue la nueva fila a la DataTable y acepte los cambios.

En C # sería algo así ...

DataTable dataTable = (DataTable)dataGridView.DataSource;
DataRow drToAdd = dataTable.NewRow();

drToAdd["Field1"] = "Value1";
drToAdd["Field2"] = "Value2";

dataTable.Rows.Add(drToAdd);
dataTable.AcceptChanges();

0

Considere una aplicación de Windows y, al usar el evento de clic de botón, coloque este código en ella.

dataGridView1.Rows
                .Add(new object[] { textBox1.Text, textBox2.Text, textBox3.Text });

0
string[] splited = t.Split('>');
int index = dgv_customers.Rows.Add(new DataGridViewRow());
dgv_customers.Rows[index].Cells["cust_id"].Value=splited.WhichIsType("id;");

Pero tenga en cuenta, WhichIsTypees el método de extensión que creé.


2
Cuando responde una pregunta con algún código, y ese código requiere un método de extensión personalizado que creó, y no incluyó el código para el método personalizado, no es una respuesta muy útil.
Bryan

gracias por el consejo. Estoy muy triste por eso. pero ese método no es un método importante
guardabosques el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.