2012-01-20 67 views
1

databaleをループし、そのデータテーブル内の特定の列の値を変更したいとします。vb.netのdatatableの列の値を変更する

例:データベースがRequest_IDDescDateおよびStatus_Indを返します。 Status_Ind列には整数値が含まれます。私は整数値をユーザーに表示したくない。私はその列に返される整数値に基づいて文字列値に変換したい。

if Status_Ind = 1 then 
    'the values changes to Published 
+1

あなたはステータス・テーブルを持っていますか?言い換えれば、 'Status_Ind'は' Published'のような名前を含む別のテーブルへの外部キーですか?その場合は、SQLクエリのDataTableを入力する前に両方のテーブルを結合する必要があります。または、このテーブルをDataSetに追加して、両方の間にfk-relationを作成する必要があります(または、基礎となるdbmsにFKがある場合は自動的にデザイナに指示させる)。 –

+0

ルックアップテーブルを意味します。私はある種の回避策を見つけました。私は別の列を追加し、Status_Int列の整数値をチェックして値を追加しました。あなたはそれについて何をしていますか?それはデータベースの終わりからそれをするより効率的ですか? – Joshua

答えて

3

を:

Dim dt As New DataTable 
dt.Columns.Add(New DataColumn("status_int", GetType(Int32))) 
dt.Columns.Add(New DataColumn("status_str", GetType(String))) 

'add example row - not publised 
Dim newDr0 As DataRow = dt.NewRow 
newDr0(0) = 0 
dt.Rows.Add(newDr0) 

'add example row - publised 
Dim newDr1 As DataRow = dt.NewRow 
newDr1(0) = 1 
dt.Rows.Add(newDr1) 

For Each dr As DataRow In dt.Rows 
    Select Case dr(0) 
     Case 1 
      dr(1) = "Published" 
     Case Else 
      dr(1) = "Not published" 
    End Select 
Next 

For Each dr In dt.Rows 
    Console.WriteLine(dr(0).ToString + " " + dr(1).ToString) 
Next 
3

は、あなたのDataTableには、このように定義されていると仮定すると:DataTableを通じ

dt.Columns.Add("Status", Type.GetType("System.String")) 

今ループ:

Dim dt As DataTable 

まずあなたがステータスを保持するために、あなたのDataTableに新しい列を追加する必要がありますステータス列を更新します。

For Each dr As DataRow In dt.Rows 
    Select Case CInt(dr.Item("Status_Ind")) 
     Case 1 
      dr.Item("Status") = "Published" 
     Case 2 
      dr.Item("Status") = "Some other Status" 
     Case Else 
      dr.Item("Status") = "Unknown" 
    End Select 
Next 

そして、あなたはその後、整数列削除することもできます:あなたは別の列を作成することによって、それを行うことができ

dt.Columns.Remove("Status_Ind") 
関連する問題