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?

LK Yeung
fuente
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

Habib
fuente
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;
//....
Jizakh
fuente
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)
Overdrive77
fuente
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";
Mahmoud Gamal
fuente
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);
Defkon1
fuente
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".

Snorvarg
fuente
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)    
Anders
fuente
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"); 
    }
RC-AI
fuente
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);
tono silencioso
fuente
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);
F.joksch
fuente
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);
Mohammad Salmanian
fuente
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;
Sherif Hamdy
fuente
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; 
Rei Salazar
fuente
¿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";
Kan
fuente
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();
luchezco
fuente
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 });
Punto net
fuente
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é.

Rangeeeer
fuente
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