DataTable:如何使用行名称和列名称获取项值?(VB)

38

我有一个简单的 DataTable,其中一列包含唯一值。例如:

ColumnName1   ColumnName2
value1        35
value2        44
value3        10

因为我知道值1、2和3始终是不同的,所以我想仅使用ColumnName2ColumnName1中的一个值来获取此表的值。例如:

searchedValue = DataTable.Rows("value3").Item("ColumnName2) 
'result would be 10

我尝试了以下示例,但没有成功:


Select 的结果上调用 FirstOrDefault() - Amiram Korach
4个回答

69
Dim rows() AS DataRow = DataTable.Select("ColumnName1 = 'value3'")
If rows.Count > 0 Then
     searchedValue = rows(0).Item("ColumnName2") 
End If

使用FirstOrDefault

Dim row AS DataRow = DataTable.Select("ColumnName1 = 'value3'").FirstOrDefault()
If Not row Is Nothing Then
     searchedValue = row.Item("ColumnName2") 
End If
在C#中:
var row = DataTable.Select("ColumnName1 = 'value3'").FirstOrDefault();
if (row != null)
     searchedValue = row["ColumnName2"];

1
你为什么没有提出使用FirstOrDefault()作为答案的解决方案呢?我认为它是最方便的。它有什么缺点吗? - Nicolas
1
这是同样的事情。当您使用 FirstOrDefault 时,需要检查返回的行是否为 null,而不是检查计数。 - Amiram Korach
你能否用C#告诉我同样的事情? - sindhu jampani
如果value3包含单引号怎么办?比如va'lue 3,该如何处理? - Peru

3
'Create a class to hold the pair...

        Public Class ColumnValue
            Public ColumnName As String
            Public ColumnValue As New Object
        End Class

    'Build the pair...

        For Each row In [YourDataTable].Rows

              For Each item As DataColumn In row.Table.Columns
                Dim rowValue As New ColumnValue
                rowValue.ColumnName = item.Caption
                rowValue.ColumnValue = row.item(item.Ordinal)
                RowValues.Add(rowValue)
                rowValue = Nothing
              Next

        ' Now you can grab the value by the column name...

        Dim results = (From p In RowValues Where p.ColumnName = "MyColumn" Select  p.ColumnValue).FirstOrDefault    

        Next

@stephenCarver 你好,我知道你已经有一段时间没有看过这个了,但是我正在尝试编写一个类似的for循环来完成相同的任务;我的问题是,我是否需要使用datatable?我能否在gridview或dataview中运行此for循环并完成相同的操作? - Parth

-1
For i = 0 To dt.Rows.Count - 1

    ListV.Items.Add(dt.Rows(i).Item("STU_NUMBER").ToString)
    ListV.Items(i).SubItems.Add(dt.Rows(i).Item("FNAME").ToString & " " & dt.Rows(i).Item("MI").ToString & ". " & dt.Rows(i).Item("LNAME").ToString)
    ListV.Items(i).SubItems.Add(dt.Rows(i).Item("SEX").ToString)

Next

-3

尝试:

DataTable.Rows[RowNo].ItemArray[columnIndex].ToString()

(这是C#代码。请将其更改为VB等效代码)


问题在于我没有行号。我只有一个ColumnName1的值,它在我的情况下是字符串。 - Nicolas
4
在VB.net中:DataTable.Rows(RowNo).ItemArray(columnNo).ToString()的意思是获取指定行和列的单元格值并将其转换为字符串类型。 - emekm

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