如何在 VB.Net 中向 DataGridView 控件添加新记录?
我不使用数据集或数据库绑定。我有一个带有 3 个字段的小表单,当用户单击“确定”时,它们应该作为新行添加到 DataGridView 控件中。
如何在 VB.Net 中向 DataGridView 控件添加新记录?
我不使用数据集或数据库绑定。我有一个带有 3 个字段的小表单,当用户单击“确定”时,它们应该作为新行添加到 DataGridView 控件中。
如果要将行添加到网格的末尾,请使用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)
我认为你应该在代码中构建一个数据集/数据表并将网格绑定到它。
您正在寻找的功能是“插入”。它将要插入的索引和用于新行值的值数组作为其参数。典型用法可能包括:
myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3});
或类似的东西。
当我尝试从使用 bindingsource 的 datagridview 转换数据源时,错误 accor 无法转换:
- - - - - 解决方案 - - - - - -
'我从绑定源更改了与 datagridview 绑定的转换
'这里的代码
Dim dtdata As New DataTable()
dtdata = CType(bndsData.DataSource, DataTable)
如果您想使用比哑数组更具描述性的东西而不使用 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,完成我的工作,然后将其重置为原来的样子。
如果您DataGridView
绑定到 a DataSet
,则不能只在DataGridView
显示中添加新行。现在它将正常工作。
相反,您应该使用以下代码添加新行DataSet
:
BindingSource[Name].AddNew()
此代码还将自动在您的DataGridView
显示中添加一个新行。