17

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

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

4

6 回答 6

32

如果要将行添加到网格的末尾,请使用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)
于 2008-11-25T22:01:10.247 回答
4

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

于 2008-11-25T14:47:47.327 回答
2

您正在寻找的功能是“插入”。它将要插入的索引和用于新行值的值数组作为其参数。典型用法可能包括:

myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3});

或类似的东西。

于 2008-11-25T15:01:55.037 回答
1

当我尝试从使用 bindingsource 的 datagridview 转换数据源时,错误 accor 无法转换:

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

'我从绑定源更改了与 datagridview 绑定的转换

'这里的代码

Dim dtdata As New DataTable()

dtdata = CType(bndsData.DataSource, DataTable)
于 2011-04-01T08:45:11.383 回答
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,完成我的工作,然后将其重置为原来的样子。

于 2012-10-03T02:31:39.917 回答
1

如果您DataGridView绑定到 a DataSet,则不能只在DataGridView显示中添加新行。现在它将正常工作。

相反,您应该使用以下代码添加新行DataSet

BindingSource[Name].AddNew()

此代码还将自动在您的DataGridView显示中添加一个新行。

于 2012-03-08T02:05:11.427 回答