2016-06-01 67 views
1

感谢。我搜索,但仍不知道如何写。vb.net如何事先与特定条件得到一个值

[前提] 我得到了一张表的DataView,并对其进行了过滤和排序。

[表] [过滤后,表格如下所示:↓]

enter image description here

我想不同条件下的名字。 我这样写,但似乎不正确。

If dv_Table1.Select("Code1 = '11'").Rows.Count > 0 Then 
    drwWork.Item("Name") = dv_Table1.Item(0).Item("Name") 

ElseIf dv_Table1.Select("Code1 = 12").Rows.Count > 0 Then 
    drwWork.Item("Name") = dv_Table1.Item(0).Item("Name") 
     If dv_Table1.Item(0).Item("Code2") = 1 Then 
     drwWork.Item("Code") = Asterisk 
     Else 
     End If 
Else 
End If 

我的主要目标是根据不同的代码1. 以获得不同的名字,我的顺序排序表也。 当记录数[代码1 = 12,例如]大于2, 我想为了ASC两个名字。

[ Item(0).Item("Name") ]部分可能不正确 我想知道正确的编码。

谢谢!

回答

0

我现在不能重现,但:

循环每一行并添加名称列表:

Dim view = New DataView() 
Dim list11 As New List(Of String) 
Dim list12 As New List(Of String) ' You could make an array of List too 

For Each row As DataRowView In view 
    If row.Item("Code1").Equals(11) Then ' "11" If it's a string 
     list11.Add(row.Item("Name")) 
    ElseIf row.Item("Code1").Equals(12) Then ' "12" If it's a string 
     list12.Add(row.Item("Name")) 
    End If 
Next 
+1

谢谢sooooo多!我有一个不同的想法~~~我会参考它 – sleepinglatte

0

您可以使用LINQ到数据表,如:

Dim dt As DataTable = DirectCast(dv_Table1.DataSource, DataTable) 

    Dim results1 = From myRow In dt.AsEnumerable() Where myRow.Field(Of [String])("Code1").Equals(11) Or myRow.Field(Of [String])("Code1").Equals(12) 
    Dim dt1 As DataTable = results1.CopyToDataTable() 

    For Each dw As DataRow In dt1.Rows 
     drwWork.Item("Name") = dw.Item("Name") 
     If dw.Item("Code2") = 1 Then 
      drwWork.Item("Code") = Asterisk 
      TableName.Rows.Add(drwWork) 'drwWork is a new row of an other datatable "TableName" for exemple 
    Next