如何在VB.Net中向DataGridView添加记录?

17

如何在VB.Net中向DataGridView控件添加新记录?

我不使用数据集或数据库绑定。 我有一个小窗体,其中包含3个字段,当用户单击“确定”时,它们应该被添加到DataGridView控件作为新行。

6个回答

36

如果您想将行添加到网格的末尾,请使用Rows集合的Add()方法...

DataGridView1.Rows.Add(New String(){Value1, Value2, Value3})

如果你想在特定位置插入行,请使用行集合的Insert()方法(正如GWLlosa所说)...

DataGridView1.Rows.Insert(rowPosition, New String(){value1, value2, value3})

我知道你提到过你不会使用数据绑定,但是如果在你的项目中定义了一个带有单个数据表的强类型数据集,你可以使用它并获取一些好的强类型方法来完成这些操作,而不必依赖于网格方法...

DataSet1.DataTable.AddRow(1, "John Doe", true)

3
我认为你应该在代码中构建一个数据集/数据表,并将网格绑定到它。

2
您需要的函数是“插入”。它的参数包括您想要插入的索引和用于新行值的值数组。典型用法可能包括:
myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3});

或类似的东西。

1
如果您的DataGridView绑定到一个DataSet,您不能仅仅在DataGridView中添加新行并显示。这样做将无法正常工作。
相反,您应该使用以下代码在DataSet中添加新行:
BindingSource[Name].AddNew()

这段代码还会自动在你的DataGridView显示中添加一行。


你确定这是正确的吗?我的 BindingSource 没有 AddNew() 方法。 - acme

1

当我尝试从使用绑定源的 DataGridView 转换数据源时,它会出现无法转换的错误:

----------解决方案------------

'我将转换操作更改为与 DataGridView 绑定的绑定源

'代码如下

Dim dtdata As New DataTable()

dtdata = CType(bndsData.DataSource, DataTable)

1
如果你想使用比一个愚蠢的数组更具描述性的东西,而又不想使用 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,进行操作,然后再将其重置为原来的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接