Vb.net 如何在DataTable中搜索特定记录?

Vb.net 如何在DataTable中搜索特定记录?,vb.net,winforms,datatable,datarow,Vb.net,Winforms,Datatable,Datarow,嗨 我有一个windows窗体,有10个文本字段和1个组合框 当用户在组合框中选择一条记录时,我希望在我的表单数据表变量(称为dtbranchs)中找到该记录,然后从数据行填充我的10个文本字段 我试过这个: Dim dr As System.Data.DataRow If mSortCode > 0 Then dr = dtBranches.Select("SortCode='" & mSortCode & "'") Me.txtBranch.Text =

我有一个windows窗体,有10个文本字段和1个组合框

当用户在组合框中选择一条记录时,我希望在我的表单数据表变量(称为dtbranchs)中找到该记录,然后从数据行填充我的10个文本字段

我试过这个:

Dim dr As System.Data.DataRow
If mSortCode > 0 Then
    dr = dtBranches.Select("SortCode='" & mSortCode & "'")
    Me.txtBranch.Text = dr("Branch").ToString()
    Me.txtBankName.Text = dr("BankName").ToString()
    Me.txtBranchTitle.Text = dr("BranchTitle").ToString()
    Me.txtReference.Text = dr("Ref").ToString
    Me.txtAddr1.Text = dr("Address1").ToString
    Me.txtAddr2.Text = dr("Address2").ToString
    Me.txtAddr3.Text = dr("Address3").ToString
    Me.txtPostCode.Text = dr("PostCode").ToString
    Me.txtTelNo.Text = dr("TelephoneNumber").ToString
    Me.txtTown.Text = dr("Town").ToString
    Me.txtTelNo.Text = dr("TelephoneNumber").ToString
end if
但无法将其编译

请问,做这件事的正确和最好的方法是什么

谢谢

Philip返回一个数据行数组。您需要声明一个数组来接收结果

Dim dr() As System.Data.DataRow
当然,您需要检查是否返回了行,并为数组中的第一行寻址

dr = dtBranches.Select("SortCode='" & mSortCode & "'")
If dr.Length > 0 Then
    Me.txtBranch.Text = dr(0)("Branch").ToString()
    Me.txtBankName.Text = dr(0)("BankName").ToString()
    ...... and so on ...

我将使用
Linq ToDataSet
和强类型
字段
方法:

Dim matches = From row In dtBranches
              Let SortCode = row.Field(Of String)("SortCode")
              Where SortCode = mSortCode
If matches.Any() Then
    Dim row = matches.First()
    Me.txtBranch.Text = row.Field(Of String)("Branch")
    Me.txtBankName.Text = row.Field(Of String)("BankName")
    Me.txtBranchTitle.Text = row.Field(Of String)("BranchTitle")
    Me.txtReference.Text = row.Field(Of String)("Ref")
    Me.txtAddr1.Text = row.Field(Of String)("Address1")
    Me.txtAddr2.Text = row.Field(Of String)("Address2")
    Me.txtAddr3.Text = row.Field(Of String)("Address3")
    Me.txtPostCode.Text = row.Field(Of String)("PostCode")
    Me.txtTelNo.Text = row.Field(Of String)("TelephoneNumber")
    Me.txtTown.Text = row.Field(Of String)("Town")
Else
    MesageBox.Show("SortCode not found.")
End If
如果要不区分大小写进行比较,请将上面的
Where
替换为:

Where StringComparer.OrdinalIgnoreCase.Equals(SortCode, mSortCode)

顺便说一句,您要分配两次电话号码。

@Time:谢谢您的帮助,但是我如何才能得到要编译的第一行呢?它说“Where”变量未标记,而“row”变量未声明。我正在VB.NET中使用.NET3.5Winforms@Time:谢谢您的帮助,但是(在添加了对**System.Data.DataSetExtensions**的正确引用之后)我在类型“EnumerablerRowCollection(属于VB$AnonymousType_0(属于DataRow,String))”上发现了此错误。在第行
如果匹配。Any()
。。。如何修复此问题?您必须使用System.Linq添加
,如果您已升级到3.5,则可能必须将引用添加到
System.Core.dll
。我添加了引用,并在我的过程中使用System.Linq添加了
。在我的过程结束时,我使用
结束。但是我得到了一个编译错误系统。Linq是一个名称空间,不能用作表达式。我该如何解决这个问题呢?您不必在用于处理对象的方法中添加using。对不起,我这里混合了C#和VB.NET。在VB中,文件顶部是Imports System.Linq。谢谢,它可以工作,但是运行
Select
命令后,使用
dtbranchs
的组合框是空的。如何重置它,使组合框不受影响?此代码不应以任何方式影响组合框。在DTBranchs上使用Select不会更改表的内容。您确定没有其他代码更改DTBranchs表内容吗?谢谢,我在填充代码末尾使用了
Reset
来删除筛选器-现在我正在执行DTBranchs。选择(“”)