如何以编程方式向 datagridview 添加新行

如果将行添加到 DataTable

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

DataGridView怎么样?

919021 次浏览

像这样:

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


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

或者您需要单独使用属性 .Rows()来设置这些值,如下所示:

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

你可以这样做:

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

或:

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

另一种方式:

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

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

在 DGV 中添加一个没有 Add ()行的新行将引发 SelectionChanged 选择改变事件,然后才能插入任何数据(或绑定 Tag 属性中的对象)。

RowTemplate创建一个克隆行更安全:

//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);

像这样:

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

如果网格与 DataSet/表绑定,则最好使用 BindingSource,如

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


//Add data to dataTable and then call


bindingSource.ResetBindings(false)

如果需要操作除单元格值字符串之外的任何内容,例如添加标记,请尝试以下操作:

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);

从 dataGridView 复制行并在相同 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;

假设您有一个不绑定到数据集的 datagridview,并且希望以编程方式填充新行..。

你要这么做。

// 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)

考虑一个 Windows 应用程序并使用按钮单击事件将此代码放入其中。

dataGridView1.Rows
.Add(new object[] { textBox1.Text, textBox2.Text, textBox3.Text });
//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;

如果您已经定义了一个 DataSource,您可以获得 DataGridViewDataSource并将其强制转换为 Datatable

然后添加一个新的 DataRow并设置字段值。

将新行添加到 DataTable并接受更改。

C # 是这样的。

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


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


dataTable.Rows.Add(drToAdd);
dataTable.AcceptChanges();
//header
dataGridView1.RowCount = 50;
dataGridView1.Rows[0].HeaderCell.Value = "Product_ID0";




//add row by cell
dataGridView1.Rows[1].Cells[0].Value = "cell value";
string[] splited = t.Split('>');
int index = dgv_customers.Rows.Add(new DataGridViewRow());
dgv_customers.Rows[index].Cells["cust_id"].Value=splited.WhichIsType("id;");

但是请注意,WhichIsType是我创建的扩展方法。

如果 dgrview 为空,我将这样添加一行: (在我的示例中,myDataGridView 有两列)

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


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


myDataGridView.Rows.Add(row);

根据文档: “ CreateCells ()清除现有的单元格并根据提供的 DataGridView 模板设置它们的模板”。

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

您还可以创建一个新行,然后将其添加到 DataGridView,如下所示:

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

这里有另一种方法来做到这一点

 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");
}

如果要绑定 List

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


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


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

如果绑定 DataTable

DataTable table = new DataTable();


DataRow newRow = table.NewRow();


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

如果有人想添加 DataTable 作为网格视图的源,那么——

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;

当 DataGrid 绑定到一个表时,我发现这不止一次地有用。

        DataTable dt = (DataTable)dgvData.DataSource;
DataRow row = dt.NewRow();
foreach (var something in something)
{
row["ColumnName"] = something ;
}
dt.Rows.Add(row);
dgvData.DataSource = dt;

我认为最简洁的方法是调用 DataGridView 并使用 lambda 表达式。简单的一行代码,同时保持代码线程安全:

MyDataGridView.Invoke((MethodInvoker)(() => MyDataGridView.Rows.Add(param1, param2, paramX)));