2017-01-04 6 views
0

このコードは挿入されたIDをarraylistに記録しています。ボタンを押すと、この配列のループを作成し、配列から各IDのデータを取得し、Datatableに入れてループ中に新しいデータを追加する必要がありますdatatableと最終的にそれをdatagridviewで表示します。 1つのレコードを挿入すると問題が発生しますが、複数のレコードを挿入すると、最後のものが表示されます。 MainFormをDataTableにデータを追加

Public Inserted_record_hold_dt As New DataTable 
Public Inserted_record_dt As New DataTable 
Public Sub Addcolumnstodatagrid() 
    Inserted_record_dt.Columns.Add("ID") 
    Inserted_record_dt.Columns(0).AutoIncrement = True 

    Inserted_record_dt.Columns.Add("drawingname") 
    Inserted_record_dt.Columns.Add("serial") 

End Sub 

、すでに

を追加されている最新のIDを持つ配列リスト上のループにクリックしたときにmain_Load

ショーボタンで
Addcolumnstodatagrid() 

そして、これでこれを呼んで

Private Sub show_btn_Click(sender As System.Object, e As System.EventArgs) Handles show_btn.Click 
    Dim InsertedID As Integer 
    Inserted_record_dt.Clear() 
    Dim R As DataRow = Inserted_record_dt.NewRow 

    'Loop For each ID in the array "Inserted_List_Array" 
    For Each InsertedID In mainadd.Inserted_List_Array 
     'MsgBox(InsertedID.ToString) 
     Dim cmd As New SqlCommand("select drawingname , serial from main where drawingid = '" & InsertedID & "'", DBConnection) 
     DBConnection.Open() 
     Inserted_record_hold_dt.Load(cmd.ExecuteReader) 
     Try 

      R("drawingname") = Inserted_record_hold_dt.Rows(0).Item(0) 
      R("serial") = Inserted_record_hold_dt.Rows(0).Item(1) 
      Inserted_record_dt.Rows.Add(R) 

     Catch 
     End Try 
     'MsgBox("added") 
     DBConnection.Close() 
     cmd = Nothing 
     Inserted_record_hold_dt.Clear() 
    Next 
    sendmail.Show() 
    sendmail.Mail_DGView.DataSource = Inserted_record_dt 
End Sub 

私のコードで何が問題なのか教えてください。

答えて

1

あなたの間違いは、ループの外でR変数を1回だけ宣言することです。このようにして、DataRowの同じインスタンスの値を連続的に置き換え、常に同じインスタンスを挿入します。

ちょうどループ

For Each InsertedID In mainadd.Inserted_List_Array 
    ...... 
    Try 
     Dim R As DataRow = Inserted_record_dt.NewRow 
     R("drawingname") = Inserted_record_hold_dt.Rows(0).Item(0) 
     R("serial") = Inserted_record_hold_dt.Rows(0).Item(1) 
     Inserted_record_dt.Rows.Add(R) 

    Catch 
    .... 
Next 

行うためのもう一つの重要な事柄の内側に宣言を移動し、あなただけの例外(メッセージなし、なしのログを)殺しているので、空のtry/catchを削除することですので、あなたは決してこのインポートにエラーがあるかどうかを確認します。最後に、エンドユーザーに間違った結果をもたらす可能性のある製品を出荷します。

+0

あなたがしてくれたことを作ったのですが、動作しますが、datagridviewのIDのカウントが正しく機能しません.1つのレコードを挿入すると、IDは0で始まり、別のレコードを挿入するとIDは1で始まります。最初のレコードと2番目のレコード2を挿入します。別のレコードを挿入するとIDは2で始まり、レコードは2になり、3番目のレコードは4になります。 –

+0

_Inserted_record_dt.Columns(0).AutoIncrementSeed = 1_でIDのカウンタを開始する場所を選択できますデータテーブルを定義するとき – Steve

関連する問題