11月からVB.NET触り始めました。
前提・実現したいこと
DBから持ってきたデータをDataGridViewにセットして表示しているのですが、
そこに新しい行を「画面上で追加」操作したとき、前行の特定のセルに入っている値をその新しく追加した行の特定セルにセットしたいです。
例)
ID | NAME | CLASS |
---|---|---|
0001 | NIC | 1J |
0002 | EDGAR | 1J |
0003 | GEORGE | 2J |
0004 | ALFRED | 3J |
3J |
最終行が新規に追加する行。
このとき、前行のCLASSセル「J3」が新規追加した行の同じセルにセットされるようにしたいです。
行の追加は、画面に「+行追加」のボタンを用意して、クリックするたびに新規行が追加されるようにしたいです。
現在の進捗
ボタンを押したら新規行が追加される、というところまでは実装しました。
該当のソースコード
VB.NET
1 Private Sub NewRowsButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewRowsButton.Click 2 Dim dr As DataRow = ClassList.NewRow 3 ClassList.Rows.Add(dr) 4 End Sub
試したこと
VB.NET
1 Private Sub NewRowsButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewRowsButton.Click 2 Dim dr As DataRow = ClassList.NewRow 3 dr("CLASS") = "J3" 4 ClassList.Rows.Add(dr) 5 End Sub
上記のようにすると行追加時にCLASSセルに「J3」と出るのですが、当然前行が必ず「J3」になるとも限らないのでダメでした。
追加の疑問
新規追加した行を削除するとき、
VB.NET
1 Private Sub DeleteRowsButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DeleteowsButton.Click 2 Try 3 'DataGridView = mrs 4 Dim ClassData As DataTable = CType(mrs.DataSource, DataTable) 5 6 For i As Integer = 0 To ClassData.Rows.Count - 1 7 'celCHECKは選択ボックスです。未選択で「0」 選択すると「1」に変わります 8 If ConvertInt32(ClassData.Rows(i)("CHECK")) = 0 Then Continue For 9 10 ClassData.Rows.RemoveAt(i) 11 12 Next 13 14 Catch ex As Exception 15 m_objLogFunc.WriteExceptionLog(ex) 16 Finally 17 '強制的に画面に戻る 18 getMenuBar() 19 End Try 20 End Sub
このように削除処理を入れているのですが、
例えば5行分データがあるとき、3行目(Rows(2))を削除する際に「5行目(Rows(4))に行がない」ということで突き返されてしまいます。
削除後「i -= 1」を入れたらいけるだろうか、と思ったのですがうまくできませんでした。新規行追加と合わせて、もし良いアドバイスがあれば賜りたいと思います。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー