如何在vb.net中使用dataview获取列的值
我有一个记录列表,对于员工R1005,我需要检查该员工是否已启用登录警报(即EnableLoginAlert=Yes),然后将显示一个按钮如何在vb.net中使用dataview获取列的值,vb.net,Vb.net,我有一个记录列表,对于员工R1005,我需要检查该员工是否已启用登录警报(即EnableLoginAlert=Yes),然后将显示一个按钮 CompanyID EmployeeNo EnableLoginAlert 10046 R1005 Yes 20041 Ajax12 No 47021 Drek 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"