表示順に関して


YURI  2012-01-17 14:54:59  No: 147449  IP: [192.*.*.*]

教えて下さい。

以下のように、フォーム上に"DataGridView"を貼り付け、ダブルクリックしたら別フォームを起動し、
そこで選択されたデータを再度テーブルに検索しに行き、該当のデータを表示させるような仕組みを
考えています。

※  別フォームで選択された発注番号は、PIN_発注番号  という項目に格納されます。

そこで、1件目の取得はうまく表示されるものの、2件目はどうしても1行目にデータが表示され、
2行目は空白の1行目と3行目に表示されるようになってしまいます。

なんとか2件目以降に選択されたものに関しては、前回の行の後ろへ表示させるような事を考えて
いますが、何か良い手はないでしょうか。。。。

教えて下さい。

よろしくお願いします。

《記述内容》


    'DataGridViewのセルダブルクリック時処理
    Private Sub G_仕入入力_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles G_仕入入力.CellDoubleClick        
  
  Dim frm_発注データ As New 発注データ検索
        frm_発注データ.ShowDialog()

        Dim PIN_発注番号 As String

        Dim KIN_発注日付 As String
        Dim KIN_発注先コード As String

        KIN_発注日付 = ""
        KIN_発注先コード = ""

        Dim Connection As New MySqlConnection
        Dim Command As MySqlCommand
        Dim DataReader As MySqlDataReader

        PIN_発注番号 = frm_発注データ.P_発注番号 '結果プロパティから

        frm_発注データ.Dispose()
        frm_発注データ = Nothing

        If PIN_発注番号 <> "" Then

            '接続文字列を設定  
            Connection.ConnectionString = "server=localhost;database=DB_KIKAN;user id=root;password=000000"

            'オープン  
            Connection.Open()
            'コマンド作成  
            Command = Connection.CreateCommand

            'SQL作成  
            Command.CommandText = "SELECT 発注日付,発注先コード FROM T_発注データ WHERE 発注番号 = '" + PIN_発注番号 + "'"

            'データリーダーにデータ取得  
            DataReader = Command.ExecuteReader
            'データを全件出力  
            Do Until Not DataReader.Read

                If IsDBNull(DataReader.Item("発注日付")) Then
                    KIN_発注日付 = ""
                Else
                    KIN_発注日付 = DataReader.Item("発注日付").ToString
                End If
                If IsDBNull(DataReader.Item("発注先コード")) Then
                    KIN_発注先コード = ""
                Else
                    KIN_発注先コード = DataReader.Item("発注先コード").ToString
                End If

            Loop

            Dim data_row As DataRow = dtTable.NewRow()

            data_row("発注番号") = PIN_発注番号
            data_row("発注日付") = KIN_発注日付

            dtTable.Rows.Add(data_row)

            'DataGridViewにデータを表示する
            G_仕入入力.DataSource = dtSet.Tables(0)

            'DataGridViewの最終行を非表示にする
            G_仕入入力.AllowUserToAddRows = False

        End If

    End Sub

編集 削除
ペイリン  2012-01-18 12:31:30  No: 147450  IP: [192.*.*.*]

質問文が客観的かつ具体的でないので、1件目・2件目や、1行目・2行目が何を指しているのか、さっぱり理解できません。
他の人が読んでも理解できるよう、具体的に質問しましょう。

編集 削除
YURI  2012-01-18 14:50:48  No: 147451  IP: [192.*.*.*]

うまく質問の意図を伝えられず申し訳ありません。

1件目、2件目というのは回数で、1回目に1行目をダブルクリックして取得された結果が1行目に
表示され、2回目に2行目をダブルクリックして取得された値が、本来は2行目に表示させたいものの、
なぜか1行目に表示されてしまいます。

結果として、DataGridViewの各行でダブルクリックされて取得されたデータは、そのダブルクリックされた
行へ表示させて欲しいというのが目的となります。

ご理解頂けたでしょうか。。。

よろしくお願いします。

編集 削除
ペイリン  2012-01-18 15:35:00  No: 147452  IP: [192.*.*.*]

なるほど、意図は分かりました。
ただ、ソースを見ると、DataGridViewのDataSourceにdtSet.Tables(0)というものをセットしていますが、これは何でしょうか?
おそらく、DataGridViewはdtSet.Tables(0)を表示しているので、この中身がおかしいということになりますが、
提示コードにはの中身を処理している部分が見当たりません。
また、その他DataTableらしきdtTableというものもありますが、これは該当のDataGridViewと何か関係があるのでしょうか?

その他、ツッコミどころが満載なのですが、まずは上記を整理することが先決ですね。

編集 削除
くだん  2012-01-19 14:00:16  No: 147453  IP: [192.*.*.*]

データベースを扱うものの常識として、
「データベースのデータに順番は無い」
というものがあります。レコード単位で
全てのデータは等価な存在です。登録順
などを示す情報は残りません。

このため、順番を指定したいのであれば、
自分で順番を保証できるようなデータを
作ります。登録順のインデックスや伝票
番号などです。
その後、そのデータでソートする事で
順番を保証できます。

また、画面の行数とも何の関連もあり
ませんので、
> 結果として、DataGridViewの各行でダブルクリックされて取得されたデータは、そのダブルクリックされた
> 行へ表示させて欲しいというのが目的となります。
そのような動きになる事はありません。
行を一意に識別できるような情報を付加し、
それが一致するデータを設定するなどの
プログラムを自分で考える必要があります。

編集 削除
YURI  2012-01-20 10:35:45  No: 147454  IP: [192.*.*.*]

私の記述の仕方がおかしいと思われますが、データテーブルを
Public dtTable As DataTable
のように宣言し、そこへ読み込んできたデータを書き出す(バインド)ような
記述をしたつもりです。。。

記載した箇所にはデータテーブルの宣言がなく申し訳ありません。

教えて頂いた、DtSet.Tables(0) の中身処理の記載がないとありましたが、
やはりここでの処理が必要なのですね・・・

編集 削除