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


157

如果将行添加到 DataTable

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

怎么样DataGridView??


2
您只需将gridview的数据源设置为与datatable相等即可将数据表的数据添加到datagridviewdatagridview1.DataSource = yourDataTable
Jonathan Van Dam

Answers:


248

你可以做:

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/zh-cn/library/system.windows.forms.datagridview.rows.aspx


28
谢谢,如果我的datagridview没有行,如何添加行?
LK Yeung

3
@DavidYeung在这种情况下,来自MGA的答案可以帮助您,您的数据源是什么?它是数据表吗?如果是这样,您可以将行添加到数据表中,然后刷新数据源
Habib'4

7
您不能像以前那样直接通过名称引用列:row.Cells [“ Column2”]。Value =“ XYZ”; ...您必须先查找索引:row.Cells [yourDataGridView.Columns [“ Column2”]。Index] .Value =“ XYZ”;
Tizz 2012年

2
理想情况下,您应该克隆RowTemplateDataGridView。当您在中的不同行上使用不同的样式时,这将成为一个问题DataGridView
安东尼

7
在阅读了大约20种解决方案(由Google找到)之后,这是我了解的第一个解决方案。
C4d

49

像这样:

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

谢谢,如果您有一个简单的单列DataGridView用于简单的可编辑文本列表,则此方法非常有效。
鲍勃·莫斯

当您没有将数据源分配给网格视图时,它的效果很好
Jhabar

当控件是数据绑定的时,不能以编程方式将行添加到DataGridView的rows集合中。
达斯·苏克

39

假设您有一个未绑定到数据集的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)

3
+1:这是唯一实际使用定义的列名的解决方案,datagridview.Columns.Add("columnname")不需要DataTable,并且以微笑结尾
Roland

32

像这样:

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

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

或者您需要使用property分别设置那里的值.Rows(),像这样:

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

1
谢谢。如果datagridview有30列,但我只想将值添加到column2和column6,其余保持null或empty。我怎样才能做到这一点??
LK Yeung

1
@DavidYeung,您当然可以:dataGridView1.Rows[1].Cells[0].Value = "cell value";
Mahmoud Gamal 2012年

1
dataGridView.Rows.Add(null,2,null,null,null,6);
MrFox 2012年

int createdRowIndex = dataGridViewRows.Add(); var createdRow = dataGridViewRows [addedRowIndex]; 现在,所有值都用默认值填充,您只需要更改非默认值的单元格即可。(假设column2是DataGridViewColumn)
Harald Coppoolse

24

使用Add()在没有行的DGV中添加新行会引发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);

3
Clone()方法返回一行,但没有单元格。row.Cells.Count是0
MARKAND巴特

5
Markand:调用DataGridViewRow.CreateCells初始化您的Cells集合。
静音

当控件是数据绑定的时,不能以编程方式将行添加到DataGridView的rows集合中。
达斯·苏克

10

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

根据docs:“ CreateCells()清除现有单元并根据提供的DataGridView模板设置其模板”。


2
谢谢,这对我非常有用,我错过了“ row.CreateCells(myDataGridView);”。
f4d0

当控件是数据绑定的时,不能以编程方式将行添加到DataGridView的rows集合中。
Darth Sucuk '18

8

如果网格绑定到数据集/表,最好使用BindingSource

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

//Add data to dataTable and then call

bindingSource.ResetBindings(false)    

5

这是这样做的另一种方法

 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

如果您需要操作除“单元格值”字符串之外的任何操作(例如添加标签),请尝试以下操作:

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

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

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

2

如果要绑定列表

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

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

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

如果绑定数据表

DataTable table = new DataTable();

 DataRow newRow = table.NewRow();

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

1

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

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; 

您能解释一下如何解决该问题吗?
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

如果......你已定义的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();

0

考虑一个Windows应用程序,并使用Button Click Event将此代码放入其中。

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

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


2
当您用一些代码回答问题时,该代码需要您创建的自定义扩展方法,而您没有包括该自定义方法的代码,那么这并不是一个非常有用的答案。
布赖恩

谢谢你的提示。我很抱歉,因为那样。但是该方法不是重要的方法
护林员,2017年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.