如何在vb.net中使用dataview获取列的值

如何在vb.net中使用dataview获取列的值,vb.net,Vb.net,我有一个记录列表,对于员工R1005,我需要检查该员工是否已启用登录警报(即EnableLoginAlert=Yes),然后将显示一个按钮 CompanyID EmployeeNo EnableLoginAlert 10046 R1005 Yes 20041 Ajax12 No 47021 Drek Yes 我尝试了以下代码

我有一个记录列表,对于员工R1005,我需要检查该员工是否已启用登录警报(即EnableLoginAlert=Yes),然后将显示一个按钮

CompanyID      EmployeeNo     EnableLoginAlert    

 10046           R1005              Yes
 20041           Ajax12             No
 47021           Drek               Yes
我尝试了以下代码:

If dCompanyDetails.Tables(0).Rows.Count > 0 Then

        Dim dataView As DataView = dCompanyDetails.Tables(0).DefaultView
        dataView.RowFilter = "EmployeeNo     = '" & strEmployeeNumber & "'"
    
       
        Dim svalue As String = dataView.Table.Rows(0).ItemArray(0).ToString()

        If svalue = "No" Then
            AlertButton.Visible = False

        ElseIf svalue = "Yes" Then
         {
            //Do something else
         }
        
        End If

End If

如果要使用
数据视图
,请使用它。这:

Dim svalue As String=dataView.Table.Rows(0.ItemArray(0.ToString)()
只是返回到
数据表
并使用它,忽略
数据视图
DataView
包含
DataRowView
对象,因此获取您需要的对象并使用它。它类似于
DataRow
,在这种情况下,您可以使用相同的方法:

Dim enableLoginAlert=CStr(数据视图(0)(“enableLoginAlert”))=“是”
现在您有了一个实际的
布尔值
,它表示您想要的状态

但你不应该这样做。一般来说,当您想要绑定数据时,您会使用
DataView
。事实上,如果您绑定了一个
DataTable
,那么您在UI中看到的数据实际上来自
DefaultView
。这就是为什么您可以对其进行筛选和排序。在这种情况下,有更好的选择

如果要通过主键查找行,则
数据表的
集合有一个
find
方法,例如

Dim row=dCompanyDetails.Tables(0).Rows.Find(strEmployeeNumber)
Dim enableLoginAlert=CStr(行(“enableLoginAlert”)=“是”
如果您不是按主键进行搜索,
DataTable
本身有一个
Select
方法。因为多行可能匹配,所以它会返回一个数组,因此需要从中取出该行,例如

Dim row=dCompanyDetails.Tables(0)。选择($“EmployeeNo=”{strEmployeeNumber}')。First()
Dim enableLoginAlert=CStr(行(“enableLoginAlert”)=“是”

如果要查找单行,可能最容易使用LINQ:

Dim row = dCompanyDetails.Tables(0).Rows.Cast(Of DataRow).AsQueryable().FirstOrDefault(Function(r) r("EmployeeNo").ToString() = strEmployeeNumber)

If row IsNot Nothing AndAlso row("EnableLoginAlert").ToString() = "Yes" Then

  ...
…尽管我是第一个声称在基本数据表上使用LINQ非常冗长的人,因为Cast/AsQueryable。我会使用强类型数据表(在数据集中);如果要将代码转换为使用强类型表,则如下所示:

Dim r = someDataSet.AProperTableName.FirstOrDefault(Function(r) r.EmployeeNo = strEmployeeNumber)

If r?.EnableLoginALert = "Yes" Then
  ...
…使用强类型数据表就不会那么麻烦了

注意:您需要
导入系统.Linq
才能让它们工作


LINQ与以下内容相同:

For Each r as DataRow in dCompanyDetails.Tables(0) 

  If r("EmployeeNo").ToString() = "R1005" AndAlso r("EnableLoginAlert").ToString() = "Yes" Then
    
      ...

您还可以选择使用
DataTable.Select
(虽然LINQ也有Select,但不是LINQ)


非常感谢。这很有帮助!:)
Dim matchingRows = dCompanyDetails.Tables(0).Select($"[EmployeeNo] = '{strEmployeeNumber}'")

If matchingrows.Count > 0 AndAlso matchingRows(0)("EnableLoginAlert").ToString() = "Yes"