如何在VB.Net中向DataGridView控件添加新记录?
我不使用数据集或数据库绑定。我有一个包含3个字段的小表单,当用户单击“确定”时,它们应作为新行添加到DataGridView控件中。
答案 0 :(得分:27)
如果要将行添加到网格的末尾,请使用Rows集合的 Add()方法...
DataGridView1.Rows.Add(New String(){Value1, Value2, Value3})
如果要在临时位置插入行,请使用Rows集合的 Insert()方法(如GWLlosa所说)......
DataGridView1.Rows.Insert(rowPosition, New String(){value1, value2, value3})
我知道你提到你没有进行数据绑定,但是如果你在项目中定义了一个带有单个数据表的强类型数据集,你可以使用它并获得一些很好的强类型方法来做这些东西而不是依赖网格方法......
DataSet1.DataTable.AddRow(1, "John Doe", true)
答案 1 :(得分:3)
我认为您应该在代码中构建数据集/数据表并将网格绑定到该数据集。
答案 2 :(得分:2)
当我尝试从使用bindingsource的datagridview转换数据源时,错误accor无法转换:
---------- ------------解决方案
'我更改了与datagridview绑定的bindingsource的转换
'此处代码
Dim dtdata As New DataTable()
dtdata = CType(bndsData.DataSource, DataTable)
答案 3 :(得分:1)
您正在寻找的功能是“插入”。它将要插入的索引作为参数,并使用一组值用于新行值。典型用法可能包括:
myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3});
或者那种效果。
答案 4 :(得分:0)
如果您的DataGridView
绑定到DataSet
,则无法在DataGridView
显示中添加新行。它现在可以正常工作。
相反,您应该使用以下代码在DataSet
中添加新行:
BindingSource[Name].AddNew()
此代码还会自动在DataGridView
显示中添加新行。
答案 5 :(得分:0)
如果你想使用比dumb数组更具描述性的东西而不诉诸于使用DataSet,那么以下内容可能会很有用。它仍然不是强类型的,但至少它由编译器检查并且将很好地处理重构。
Dim previousAllowUserToAddRows = dgvHistoricalInfo.AllowUserToAddRows
dgvHistoricalInfo.AllowUserToAddRows = True
Dim newTimeRecord As DataGridViewRow = dgvHistoricalInfo.Rows(dgvHistoricalInfo.NewRowIndex).Clone
With record
newTimeRecord.Cells(dgvcDate.Index).Value = .Date
newTimeRecord.Cells(dgvcHours.Index).Value = .Hours
newTimeRecord.Cells(dgvcRemarks.Index).Value = .Remarks
End With
dgvHistoricalInfo.Rows.Add(newTimeRecord)
dgvHistoricalInfo.AllowUserToAddRows = previousAllowUserToAddRows
值得注意的是,用户必须拥有AllowUserToAddRows
权限,否则无效。这就是我存储现有值,将其设置为true,完成我的工作,然后将其重置为原来的原因。