2012-01-20 3 views
1

Я хочу выполнить цикл через базу данных и изменить значения определенного столбца в этом datatable.Изменение значений столбца в datatable в vb.net

например: в базе данных возвращается Request_ID, Desc, Date и Status_Ind. Столбец Status_Ind содержит целочисленные значения. Я не хочу показывать целые значения пользователю. Я хочу преобразовать это в строковое значение на основе целочисленных значений, возвращаемых в этих столбцах.

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

У вас есть Status-Table? Другими словами, 'Status_Ind' является внешним ключом для другой таблицы, которая содержит эти имена типа' Опубликовано'? Если это так, вы должны присоединиться к обеим таблицам, прежде чем заполнять DataTable в SQL-Query. Или вы должны добавить эту таблицу в DataSet и создать fk-отношения между ними (или позволить разработчику сделать это автоматически, если ваши базовые 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 определяется следующим образом:

Dim dt As DataTable 

Прежде всего, необходимо добавить новый столбец в DataTable для удержания Статус:

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

Теперь Петля через 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") 
Смежные вопросы