【VB.NET】DataGridView の行を動的に追加してみる
おはようございます。
昨日に引き続き、DataGridView関連の話し。
今回は行を動的に追加する方法を試してみてました。
プログラムは前回のものを流用します。
【VB.NET】DataGridView を直接変更してデータを更新してみる
スポンサーリンク
プログラム修正
追加処理
追加ボタンが押されたタイミングで、データグリッドビューの空行を作成して追加します。
今回は、1行追加したら「更新」するまで追加できないようにしました。
(グローバルでフラグを持たせています)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | ''' <summary> ''' 追加ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> PrivateSubbtnAdd_Click(sender AsObject,eAsEventArgs)HandlesbtnAdd.Click ' 追加後に更新されていなければ処理しない If(AddRowFlg)Then Return EndIf AddRowFlg=True Using conn AsNewSQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' データ追加 Using con AsNewDataContext(conn) Dimidx=dgvCat.Rows.Count() ' 行追加 dgvCat.Rows.Add() ' 種別マスタ取得 Dimkinds AsTable(Of Kind)=con.GetTable(Of Kind) DimkindResult AsIQueryable(Of Kind)=FromxIn kinds Order Byx.KindCd Selectx DimkindList=kindResult.ToList() ' 猫一覧取得 DimtblCat AsTable(Of Cat)=con.GetTable(Of Cat) DimnewNo=0 ' 使用できるNoを判定 ForiAsInteger=1To tblCat.ToList().Count()+1 DimselectNo=i If tblCat.SingleOrDefault(Function(xAsCat)x.No=selectNo)Is NothingThen newNo=selectNo EndIf Next ' No(プライマリなので編集不可) Dimno=NewDataGridViewTextBoxCell() no.Value=newNo dgvCat(0,idx)=no dgvCat(0,idx).ReadOnly=True ' 名前 Dimname=NewDataGridViewTextBoxCell() dgvCat(1,idx)=name ' 性別 Dimsex=NewDataGridViewComboBoxCell() sex.Items.AddRange({"♂","♀"}) sex.DisplayStyle=DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2,idx)=sex ' 年齢 Dimage=NewDataGridViewTextBoxCell() dgvCat(3,idx)=age ' 種別 Dimkind=NewDataGridViewComboBoxCell() kind.DataSource=kindList kind.DisplayMember="KindName" kind.ValueMember="KindCd" kind.DisplayStyle=DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(4,idx)=kind ' 好物 Dimfavorite=NewDataGridViewTextBoxCell() dgvCat(5,idx)=favorite EndUsing conn.Close() EndUsing EndSub |
更新処理
更新処理では、データグリッドビューから直接値を取得して、データベースに存在しなければ追加、存在すれば更新というようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | ''' <summary> ''' 更新ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> PrivateSubbtnUpdate_Click(sender AsObject,eAsEventArgs)HandlesbtnUpdate.Click Using conn AsNewSQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' データ更新 Using con AsNewDataContext(conn) ' 対象のテーブルオブジェクトを取得 DimTable=con.GetTable(Of Cat) ' 選択されているデータを取得 Fori=0To dgvCat.Rows.Count-1 ' テーブルから対象のデータを取得 Dimno AsInteger=dgvCat(0,i).Value Dimtarget AsCat=Table.SingleOrDefault(Function(xAsCat)x.No=no) If(target Is Nothing)Then ' データ作成 DimCat AsNewCat() Cat.No=dgvCat(0,i).Value Cat.Name=dgvCat(1,i).Value Cat.Sex=dgvCat(2,i).Value Cat.Age=dgvCat(3,i).Value Cat.KindCd=dgvCat(4,i).Value Cat.Favorite=dgvCat(5,i).Value Table.InsertOnSubmit(Cat) Else ' データ変更 target.Name=dgvCat(1,i).Value target.Sex=dgvCat(2,i).Value target.Age=dgvCat(3,i).Value target.KindCd=dgvCat(4,i).Value target.Favorite=dgvCat(5,i).Value EndIf ' DBの変更を確定 con.SubmitChanges() Next EndUsing conn.Close() EndUsing AddRowFlg=False ' データ再検索 search() MessageBox.Show("データを更新しました。") EndSub |
起動してみる
とりあえず検索します。
追加ボタンをクリックすると空行が追加されます。
追加された行に値を設定します。
更新ボタンをクリック、再検索後の画面が表示されます。
まとめ
年の瀬となり忙しくなってまいりましたが
なんとか更新していきたいと思います。
次回はどうしようかな。。
ではでは。
ディスカッション
ピンバック & トラックバック一覧
[…] 【VB.NET】DataGridView の行を動的に追加してみる | ドラブロ – let bygones be bygo…VB.NET の WindowsForms で、画面上からデータグリッドビューの行を追加するサンプルです。www.doraxdora.com […]