2016-06-01 25 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 に応じて別の名前を取得することです。 [code1 = 12などのレコード番号が2より大きい場合、 ASCの順に2つの名前を取得します。

[ 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

大変ありがとうございました!私は別の考えを持っていた~~~私はそれを参照します – sleepinglatte

0

あなたが好きDATATABLEするの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 
関連する問題