none
DataGridViewに自動でNoを挿入するには RRS feed

  • 質問

  • お世話になっております。

     

    DataGridViewに新しいデータ(行)を追加する時に自動でNoを更新して挿入するようにしたいのですが、1回のAddで2行追加されてしまいました。1行ずつできないのですが、いい方法はありませんか?

    DataGridView1_NewRowNeededイベントで以下のように組んでみました。

        Private Sub DataGridView1_NewRowNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles DataGridView1.NewRowNeeded
            Dim dRow As DataRow
            '自動で受注Noを設定する。
            OderNo = OderNo + 1
            dRow = ADataSet.OderWork_t.NewRow
           dRow("受注No") = OderNo
             ADataSet.OderWork_t.Rows.Add(dRow)
             '追加データを確定してテーブル更新 データベースに反映する
            Me.OderWork_tTableAdapter.Update(YMSYSDataSet.A_OderWork_t)
           End Sub

    2007年1月19日 1:29

回答

  • データテーブルに行を追加すると、その結果がDataGridViewに返ってくるため、結果としておかしなことになるのでしょう。
    代替として、以下のような形ではダメでしょうか? 以下の例ですと、RowValidatingで合格した時のみ、OderNoがインクリメントされます。人間が間違えて新規行をクリックする場合もあるので、この方が良いんじゃないかと勝手に想像します。

     

       Dim OderNo As Integer = 0

      

        Private Sub DataGridView1_NewRowNeeded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles DataGridView1.NewRowNeeded

       '3列目にOderNoをセット

            e.Row.Cells(2).Value = OderNo

        End Sub

     

        Private Sub DataGridView1_RowValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.RowValidating

              .

              .

              .

     

       '新規行で、検索に合格して行を確定した時だけ以下を実行

            If Me.DataGridView1.IsCurrentRowDirty Then

                OderNo += 1

            End If

        End Sub

    2007年1月19日 6:03
    モデレータ

すべての返信

  • データテーブルに行を追加すると、その結果がDataGridViewに返ってくるため、結果としておかしなことになるのでしょう。
    代替として、以下のような形ではダメでしょうか? 以下の例ですと、RowValidatingで合格した時のみ、OderNoがインクリメントされます。人間が間違えて新規行をクリックする場合もあるので、この方が良いんじゃないかと勝手に想像します。

     

       Dim OderNo As Integer = 0

      

        Private Sub DataGridView1_NewRowNeeded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles DataGridView1.NewRowNeeded

       '3列目にOderNoをセット

            e.Row.Cells(2).Value = OderNo

        End Sub

     

        Private Sub DataGridView1_RowValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.RowValidating

              .

              .

              .

     

       '新規行で、検索に合格して行を確定した時だけ以下を実行

            If Me.DataGridView1.IsCurrentRowDirty Then

                OderNo += 1

            End If

        End Sub

    2007年1月19日 6:03
    モデレータ
  • データセットデザイナでOderWork_tの受注Noのプロパティを表示してAutoIncrementをTrueにすると仮の自動採番が行われます。

    NewRowNeededイベントを使っているということはVirtualModeだと思いますがVirtualModeで使わないといけないのでしょうか?

    2007年1月19日 11:41
  • trapemiya さんありがとうございました。

    おかげさまで、うまくできました。

    2007年1月25日 2:32