360 行のデータを含むフォームがあります。これらのデータをデータテーブルに追加する必要があります。ただし、重複がある場合は、そのデータを含む行のみを更新する必要があります。重複の数は 0 から 180 の範囲です。vb.net 3.5 では可能ですか? もしそうなら、どのように?
質問する
1010 次
1 に答える
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)
....
1 つ以上の textbox1.Text に同じ ID が含まれている場合、前の行が新しい値で更新されます。そうでない場合、新しい行がデータテーブルに追加されます。
編集
数量列の合計操作に関するコメントを見て、アプローチを変更する必要があります(もちろん、必要な数値型の3番目の列を追加します)
' 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
編集
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
于 2013-04-23T11:16:32.680 に答える