#はじめに
いつも大変お世話になっております。
色々調べてはみたのですが分からなかったため、質問させて頂きます。
どうぞ宜しくお願い致します。
#何をしようとしているか
受注伝票画面のような、
- ヘッダー部:基本情報入力
- 明細部:詳細情報入力
- フッター部:ファンクションキー(登録、削除etc)
に分かれたWinFormを作成しています。
(参照元:http://www.gyoumusoft.jp/column/hanbai/post-74/)
今回、こういった明細部をDataGridViewを用いて作成しようと考えています。
これにあたり、掲題の件で詰まってしまい、質問させて頂いた次第です。
上図のように、DataGridViewに型付きDataTableをバインドし、以下の構成としました。
- コード入力部分
- コード検索用のボタン(デザイナで追加)
- コードに紐づく名称を表示する部分
ボタンを押したら(CellContentClickイベント)検索用画面を表示し、取得値をcodeとnameに入力するという動作を実現しようとしています。
望む動作としては、DataGridViewの通常動作(下図)のように、
検索ボタンによって値を取得した後、自動的に次の行が出てくるようにしたいのですが、CellContentClickイベントで値を代入すると、下図のように次の行が表示されず、次の行が追加できない状態です。
#やってみたこと
①DataTable.rows.add
→CellContentClickイベント内で、codeとnameに値をセットした後、addしてみましたが、NoNullAllowedExceptionが発生して落ちてしまいます。よく調べてみると、DataTableとDataGridViewのレコード数に1レコード分相違があり(dgvのほうが1多い)、dgvの列の編集がまだ確定していないことが分かりました。かといってどのように確定すれば良いのかも分からない状態です。
②DataGridView.rows.add
→エラー発生。バインドしているので出来ないようです。
#ソースコード
Public Class frmTestDrid '型付きデータテーブル Friend dt as new TestDataSet.TestDataTable Private Sub frmTestDrid_Load(sender As Object, e As EventArgs) Handles MyBase.Load DataGridView1.AutoGenerateColumns = False DataGridView1.DataSource = dt End Sub Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick Dim dgv As DataGridView = DirectCast(sender, DataGridView) If dgv.Columns(Button.Name).Name = Button.Name Then dgv.BeginEdit(True) '簡略化のため検索画面ではなく直接値を入れてあります dgv.Rows(dgv.CurrentCell.RowIndex).Cells(thisCode.Name).Value = 1 dgv.Rows(dgv.CurrentCell.RowIndex).Cells(thisName.Name).Value = "test" dgv.EndEdit() 'dt.Rows.Add() 'dgv.Rows.Add() End If End Sub End class
#動作環境
Visual Studio 2019
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/23 07:10
退会済みユーザー
2021/04/23 07:45
2021/04/23 07:53