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

Posted

技术标签:

【中文标题】DataTable:如何使用行名和列名获取项目值? (五)【英文标题】:DataTable: How to get item value with row name and column name? (VB) 【发布时间】:2012-09-05 09:27:06 【问题描述】:

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

ColumnName1   ColumnName2
value1        35
value2        44
value3        10

因为我知道值 1、2 和 3 总是彼此不同,所以我想只使用 ColumnName2其中一个值来获取该表的值列名1。 例如:

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

我尝试了以下示例均未成功:

with the DataTable.Select method:返回一个行数组,但我只需要一个

with the DataTable.Rows.IndexOf method:如果我理解的很好,我需要提供整行内容才能用这种方法找到它。

【问题讨论】:

Select 的结果上调用FirstOrDefault() 【参考方案1】:
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"];

【讨论】:

您为什么不提出以FirstOrDefault() 为答案的解决方案?我发现它最方便。它有缺点吗? 这是一回事。当您使用FirstOrDefault 时,您需要检查返回的行是否为空,而不是检查计数。 你能用c#告诉我同样的事情吗 如果 value3 包含单引号怎么办?喜欢 value 3 怎么处理?【参考方案2】:
'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 循环来做确切的事情;我的问题是我需要使用数据表吗?我可以为gridview或dataview中的数据运行这个for循环并做同样的事情吗?【参考方案3】:
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

【讨论】:

【参考方案4】:

试试:

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

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

【讨论】:

问题是我没有行号。 ColumnName1 只有一个值,在我的例子中是字符串。 在 VB.net 中:DataTable.Rows(RowNo).ItemArray(columnNo).ToString()

以上是关于DataTable:如何使用行名和列名获取项目值? (五)的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中读取矩阵并获取行名和列名

如何根据行名和列名的比较构建方阵

如何从数据框中检索行名和列名?

Pandas - 在应用映射期间检索每个元素的行名和列名

Vue中如何获取表格中的行名和列号?

从R中给定列名和行名的数据集中获取值