如何在VB.NET中更新DataTable中的一行?

16

我有以下代码:

Dim i As Integer = dtResult.Rows.Count
For i = 0 To dtResult.Rows.Count Step 1
    strVerse = blHelper.Highlight(dtResult.Rows(i).ToString, s)
    ' syntax error here
    dtResult.Rows(i) = strVerse 
Next

我想将一个strVerse添加到当前行。

我做错了什么?

3个回答

23
你遇到的问题是你正在尝试替换整个行对象。这是不被DataTable API允许的。相反,你必须更新行对象中列的值。或者向集合添加新行。
要更新特定行的列,可以通过名称或索引访问它。例如,你可以编写以下代码来将“Foo”列更新为值strVerse。
dtResult.Rows(i)("Foo") = strVerse

10

您可以通过索引、名称和一些其他方式来访问列:

dtResult.Rows(i)("columnName") = strVerse

您应该先确保您的DataTable有一些列...


8
Dim myRow() As Data.DataRow
myRow = dt.Select("MyColumnName = 'SomeColumnTitle'")
myRow(0)("SomeOtherColumnTitle") = strValue

上面的代码实例化了一个DataRow。在这里,“dt”是一个DataTable,您通过选择任何一列来获取一行(我知道,听起来很奇怪)。然后,您可以设置您想要的任何行(我选择了第一行,或“myRow(0)”)的任何列的值。


注意:根据我的经验,这将更新由select返回的行的副本,而不是数据表内原始的行。 - Herbert
@Herbert 我最初也是这么想的,但 select 语句是从 DataTable 中获取一行数据,而不是创建一个副本或从通用 DataTable 对象中获取一行数据。它是从“真实的东西”中获取的。因此,当您设置所选行上的列的值时,您就可以处理从原始 DataTable 中选择的行。 - vapcguy
2
你是对的,我在此期间进行了测试。我之前的评论是不正确的。 - Herbert

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