2013-04-23 3 views
0

У меня есть форма, содержащая 360 строк данных. Мне нужно добавить эти данные в datatable. Но если есть дубликат, он должен только обновлять строку, содержащую эти данные. И количество дубликатов может варьироваться от 0 до 180. Можно ли это сделать в vb.net 3.5? Если да, то как?, добавляя переменное число строк в datatable

+0

Что такое "строка данных", вы пробовали что-нибудь? –

+0

@Tim Schmelter: строка данных - это 3 столбца данных, один из которых имеет для меня первостепенное значение, в том смысле, что мне не нужны его дубликаты. – SaurabhSuman

ответ

0

Вы можете использовать метод DataTable.LoadDataRow.
Для этого требуется определить первичный ключ таблицы.
Первичный ключ используется методом для идентификации повторяющихся строк

Dim dt = new DataTable("test") 
Dim col = dt.Columns.Add("ID", Type.GetType("System.Int32")) 
col.AllowDbNull = false 
col.Unique = true 
dt.Columns.Add("Name", Type.GetType("System.String")) 
..... ' and so on ' 

' now the primary key 
Dim columns(1) As DataColumn 
columns(0) = dt.Columns("ID") 
dt.PrimaryKey = columns 

' And then the LoadDataRow 
Dim newRow As Object() = New Object(1) {} 
newRow(0) = Convert.ToInt32(TextBox1.Text) 
newRow(1) = TextBox2.Text 
dt.LoadDataRow(newRow, True) 
.... 

Если один или несколько из вашего TextBox1.Text содержит тот же идентификатор, предыдущие строки будут обновлены с новыми значениями в противном случае новой строки будет добавлен к DataTable

EDIT
Проводы свой комментарий о операции на сумму в столбце Количество, то вы должны изменить подход (конечно, добавить третий столбец с числовым типом desidered)

' Search if the ID is already present ' 
Dim rows = dt.Select("ID=" & TextBox1.Text) 
if rows.Length == 0 Then 
    ' No ID found, add a newrow to the datatable' 
    Dim newRow = dt.NewRow() 
    newRow(0) = Convert.ToInt32(TextBox1.Text) 
    newRow(1) = TextBox2.Text 
    newRow(2) = Convert.ToInt32(TextBox3.Text) 
    dt.Rows.Add(newRow) 
Else 
    ' ID found, the Rows array should be of just one row and the second column incremented of the quantity ' 
    rows(0)(2) += Convert.ToInt32(TextBox3.Text) 
End If 

EDIT

Dim dt As New DataTable 
'adding columns to the datatble' 
dt.Columns.Add("Operation") 
dt.Columns.Add("folder") 
' This is a numeric column, so tell it to the framework 
dt.Columns.Add("quantity", Type.GetType("System.Int32")) 

'adding datarows 
' The search is on a string column, so enclose in single quotes 
' I assume that a 'folder' names doesn't contains a single quote 
Dim rows = dt.Select("folder='" & L1F1.Text + "'") 
If rows.Length = 0 Then 
    Dim newRow = dt.NewRow() 
    newRow(0) = L1Ob1.Text 
    newRow(1) = L1F1.Text 
    newRow(2) = Convert.ToInt32(L1Qty1.Text) 
    dt.Rows.Add(newRow) 
Else 
    rows(0)(2) += Convert.ToInt32(L1Qty1.Text) 
End If 
+0

и что мне делать, если я хотел подвести итоги? – SaurabhSuman

+0

Какие значения? Это всего лишь псевдокод, основанный на вашем вопросе. Я не могу быть более точным, не зная вашей структуры данных – Steve

+0

уверен ... у меня есть 3 столбца ... Идентификатор, имя и количество, которое является целым числом ... Итак, если имя повторялось более одного раза, количества нужно подвести ... Возможно ли это сделать? – SaurabhSuman

Смежные вопросы