How to add a new row to datagridview programmatically
Asked Answered
E

19

186

if add row to DataTable

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

How about DataGridView??

Endgame answered 8/4, 2012 at 15:0 Comment(2)
You can add the data of a datatable to a datagridview just by setting the datasource of the gridview equal to the datatable datagridview1.DataSource = yourDataTableUndies
Complete Code: codingfusion.com/Post/Add-row-to-Asp-Net-GridViewJamijamie
K
297

You can do:

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

or:

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

Another way:

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

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

Kristopher answered 8/4, 2012 at 15:7 Comment(6)
thank you, if my datagridview have no rows, how can i add row?Endgame
@DavidYeung well in that case answer from MGA can help you out, what is your data source ? is it a datatable? if so you can add the row to the datatable and then refresh the data sourceKristopher
You cannot directly reference a column by name as you did: row.Cells["Column2"].Value = "XYZ"; ... You have to look up the index first: row.Cells[yourDataGridView.Columns["Column2"].Index].Value = "XYZ";Cageling
Ideally, you should clone the RowTemplate of the DataGridView. This becomes more of an issue when you have different styles across different rows in the DataGridView.Wakayama
Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.Effuse
when it bided to data it will get error.Lonni
S
65

Like this:

var index = dgv.Rows.Add();
dgv.Rows[index].Cells["Column1"].Value = "Column1";
dgv.Rows[index].Cells["Column2"].Value = 5.6;
//....
Snuffle answered 14/11, 2013 at 4:51 Comment(4)
Thanks, this works really well if you have a simple single column DataGridView for simple editable lists of text.Barley
Its works great in the case when you have no data source assigned to grid viewTriode
Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.Effuse
And can be easily cleared (in case of showing new result/refreshing search data etc.) with datagridview1.Rows.Clear();Uhl
E
57

Lets say you have a datagridview that is not bound to a dataset and you want to programmatically populate new rows...

Here's how you do it.

// 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)
Eros answered 1/1, 2016 at 23:45 Comment(0)
C
36

Like this:

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

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

Or you need to set there values individually use the propery .Rows(), like this:

 dataGridView1.Rows[1].Cells[0].Value = "cell value";
Candidacandidacy answered 8/4, 2012 at 15:5 Comment(4)
thank you. if the datagridview have 30 columns, but i just want to add the value to column2 and column6 and the rest keep null or empty . how can i do this??Endgame
@DavidYeung, Sure you can: dataGridView1.Rows[1].Cells[0].Value = "cell value";Candidacandidacy
dataGridView.Rows.Add(null, 2, null, null, null, 6);Chantay
int addedRowIndex = dataGridViewRows.Add(); var addedRow = dataGridViewRows[addedRowIndex]; now all values are filled with the default value, you only have to change the cells that are not default: addedRow.Cells[column2.Index].Value = myValue; (assuming column2 is a DataGridViewColumn)Cancer
K
29

Adding a new row in a DGV with no rows with Add() raises SelectionChanged event before you can insert any data (or bind an object in Tag property).

Create a clone row from RowTemplate is safer imho:

//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);
Kazan answered 26/9, 2013 at 15:13 Comment(3)
Clone() method returned a row but with no Cells. row.Cells.Count is 0.Oliana
Markand: Call DataGridViewRow.CreateCells to initialize your Cells collection.Slowwitted
Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.Effuse
S
16

This is how I add a row if the dgrview is empty: (myDataGridView has two columns in my example)

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

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

myDataGridView.Rows.Add(row);

According to docs: "CreateCells() clears the existing cells and sets their template according to the supplied DataGridView template".

Salmagundi answered 28/2, 2017 at 23:13 Comment(1)
Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.Effuse
B
8

If the grid is bound against a DataSet / table its better to use a BindingSource like

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

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    
Bankroll answered 17/1, 2014 at 10:3 Comment(0)
B
7

here is another way to do such

 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"); 
    }
Blavatsky answered 8/8, 2017 at 7:45 Comment(0)
S
5

If you need to manipulate anything aside from the Cell Value string such as adding a Tag, try this:

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);
Slowwitted answered 20/1, 2015 at 17:49 Comment(0)
B
3
yourDGV.Rows.Add(column1,column2...columnx); //add a row to a dataGridview
yourDGV.Rows[rowindex].Cells[Cell/Columnindex].value = yourvalue; //edit the value

you can also create a new row and then add it to the DataGridView like this:

DataGridViewRow row = new DataGridViewRow();
row.Cells[Cell/Columnindex].Value = yourvalue;
yourDGV.Rows.Add(row);
Broca answered 7/8, 2017 at 7:56 Comment(0)
A
3

If anyone wanted to Add DataTable as a source of gridview then--

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("column1"));
dt.Columns.Add(new DataColumn("column2"));

DataRow dr = dt.NewRow();
dr[0] = "column1 Value";
dr[1] = "column2 Value";

dt.Rows.Add(dr);

dataGridView1.DataSource = dt;
Airport answered 2/11, 2020 at 16:17 Comment(0)
G
2

I think the cleanest way to do is invoking the DataGridView and using a lambda expression. Simple one liner while also keeping the code thread safe:

MyDataGridView.Invoke((MethodInvoker)(() => MyDataGridView.Rows.Add(param1, param2, paramX)));
Gile answered 8/8, 2022 at 15:25 Comment(2)
Underrated approach to populating datagridviews!Terbecki
If we have columns added earlier, then this is a very quick and easy approach to add Rows.Apodaca
D
1

An example of copy row from dataGridView and added a new row in The same 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;
Dani answered 17/10, 2015 at 2:45 Comment(0)
N
1

Consider a Windows Application and using Button Click Event put this code in it.

dataGridView1.Rows
                .Add(new object[] { textBox1.Text, textBox2.Text, textBox3.Text });
Nisse answered 15/1, 2016 at 18:2 Comment(0)
T
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; 
Tsan answered 2/2, 2016 at 14:59 Comment(1)
Can you please explain how it would resolve the issue?Kosygin
S
1

If you´ve already defined a DataSource, You can get the DataGridView´s DataSource and cast it as a Datatable.

Then add a new DataRow and set the Fields Values.

Add the new row to the DataTable and Accept the changes.

In C# it would be something like this..

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

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

dataTable.Rows.Add(drToAdd);
dataTable.AcceptChanges();
Saltine answered 3/2, 2016 at 16:26 Comment(0)
C
1
//header
dataGridView1.RowCount = 50;
dataGridView1.Rows[0].HeaderCell.Value = "Product_ID0";


//add row by cell 
 dataGridView1.Rows[1].Cells[0].Value = "cell value";
Creosol answered 25/3, 2016 at 15:32 Comment(0)
B
0

I have found this useful more than once when the DataGrid is bound to a table.

        DataTable dt = (DataTable)dgvData.DataSource;
        DataRow row = dt.NewRow();
        foreach (var something in something)
        {
           row["ColumnName"] = something ;               
        }
        dt.Rows.Add(row);
        dgvData.DataSource = dt;
Basil answered 28/11, 2020 at 4:20 Comment(0)
P
-1
string[] splited = t.Split('>');
int index = dgv_customers.Rows.Add(new DataGridViewRow());
dgv_customers.Rows[index].Cells["cust_id"].Value=splited.WhichIsType("id;");

But be aware, WhichIsType is the extension method I created.

Polypropylene answered 2/1, 2017 at 17:55 Comment(2)
When you answer a question with some code, and that code requires a custom extension method you created, and you didn't include the code for the custom method, it isn't a terribly useful answer.Ingmar
thanks for the tip. i am sory becuse of that. but that methode its not an important methodePolypropylene

© 2022 - 2024 — McMap. All rights reserved.