vb.netでのDataGridViewについて質問です。
Value内が{}だった時の意味とif文で判定させる方法を教えて下さい。
DataGridViewでのセルで空白だった場合セル内のValueの値がnothing だったり、DBNullと表示されてきました。しかし現在セルを不必要に増やしたところ、Valueの値が{}様な物が入っていました。if文でDBNullだったりNothingだったらループを抜けようとしましたが、反応しません。
Value内が{}だった時の意味とif文で判定させる方法を教えて下さい。
vb.net
1While i < row 2 If dgv.Rows(i).Cells(0).Value Is Nothing Then 3 4 Exit While 5 6 ElseIf dgv.Rows(i).Cells(0).Value Is DBNull.Value And dgv.Rows(i).Cells(3).Value Is DBNull.Value Then 7 8 MessageBox.Show("日付と金額が入力されていない為、保存できませんでした。", "日付と金額が入力されておりません。", MessageBoxButtons.OK, MessageBoxIcon.Error) 9 Exit Sub 10 11 ElseIf dgv.Rows(i).Cells(0).Value Is DBNull.Value Then 12 13 MessageBox.Show("日付が入力されていない為、保存できませんでした。", "日付が入力されておりません。", MessageBoxButtons.OK, MessageBoxIcon.Error) 14 Exit Sub 15 16 ElseIf dgv.Rows(i).Cells(3).Value Is DBNull.Value Then 17 18 MessageBox.Show("金額が入力されていない為、保存できませんでした。", "金額が入力されておりません。", MessageBoxButtons.OK, MessageBoxIcon.Error) 19 Exit Sub 20 21 End If 22 23 i += 1 24 End While
XY 問題のような気がします。Y だけでなく X (そもそものやりたいこと) を書いてもらうとより的確な解決策が提案されるかもしれません。
XYとは何でしょうか?
座標でしょうか?
聞く前にググるなどして自分で調べてはいかが?
どのような判断をしたのかソースを出せませんか?
```vb.net
Dim row As Long = dgv.RowCount
'row = row - 1
Dim i As Long = 0
While i < row
If dgv.Rows(i).Cells(0).Value Is Nothing Then
Exit While
ElseIf dgv.Rows(i).Cells(0).Value Is DBNull.Value And
dgv.Rows(i).Cells(3).Value Is DBNull.Value Then
MessageBox.Show("日付と金額が入力されていない為、保存できませんでした。", "日付と金額が入力されておりません。", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
ElseIf dgv.Rows(i).Cells(0).Value Is DBNull.Value Then
MessageBox.Show("日付が入力されていない為、保存できませんでした。",
"日付が入力されておりません。", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
ElseIf dgv.Rows(i).Cells(3).Value Is DBNull.Value Then
MessageBox.Show("金額が入力されていない為、保存できませんでした。",
"金額が入力されておりません。", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
i += 1
End While
```
申し訳ございません
まだこのサイトを使い慣れていない為、失礼な貼り方をしてしまいました。
コードは質問文中に追記、編集するかたちで貼ってください。コメント欄ではマークダウン記法(```VB.NET ... ```)は使えません。
この処理で実現したい処理は,DataGridViewでのセルの値が空白だった場合メッセージを表示させる事を
したいです。
DataGridViewは表として表示されるのですが、表の行の一つの項目にデータが入っている場合、
他の項目が空白だったら空白のセルの値には DBNull型として保存しようとします。
また、自動で新規の行が作成されるのですが、新規の行に何もデータが打ち込まれなければ
新規の行だけ空白のセルの値は Nothingとして保存しようとします。
しかし、不必要な行をいくつか作成し空白のセルの値を見ると{}と表示され、if分のNothingやDBNullでは判定できなくなります。
この{}の意味やif分での判定の仕方を知っている方がいましたらご教授願います。
「空白のセルの値を見ると{}と表示され」とありますが、これはどこにどのように表示されているのでしょうか?
今回の場合ですとdgv.Rows(i).Cells(0).Valueの値が{}と表示されます。
このセルは日付のデータをしまう箇所なのでDataTime型のセルです。
データソースが SQL Server などのデータベースのテーブルで、そのレコード一覧を DataGridView に表示し、ユーザーが DataGridView を見て編集した結果を、元のデータベースのテーブルに反映させるというようなことが X と想像してますが、そうだとすると質問 Y は「ぼくがかんがえたさいきょうのやりかた」的のようにしか思えませんが・・・
またプログラムを触っていてきずいた点ですが、空白セルにクリックをし記入をする前にこのプログラムを動かすとデータが入っていないセル、Nothingだった値が{}と変更されていました。これも関係するのでしょうか?
DataGridView1.Rows(i).Cells(0).Value.GetTypeとしてどう表示されるか確認してみましょう。
データソースが何なのかは不明ですし質問者さんの説明足りてない部分がありますが、何らかのデータソースをDataGridViewに表示して、データの追加などの編集を行い、その未入力チェックを行いたいというのは十分読み取れると思うのですが・・・
だから、
> データソースが SQL Server などのデータベースのテーブルで、そのレコード一覧を DataGridView に表示し、ユーザーが DataGridView を見て編集した結果を、元のデータベースのテーブルに反映させるというようなことが X と想像してますが、
と言ってます。その想像がハズレでしたら何が X でそれに最適な解決策は分かりませんが、当たりなら質問 Y は「ぼくがかんがえたさいきょうのやりかた」的のようにしか思えません。
DataGridView1.Rows(i).Cells(0).Value.GetTypeを試してみましたが
僕の知識不足で使えませんでした。
デバックで少し調べた結果
不必要なセルの中のvalueが""になっており,
ObjectがString型になっておりました。
これは何か関係がありますか?
申し訳ございません。
空白だったデータはDBNullとして変換されていた為保存できていないようでした。
YAmaGNZさんご協力ありがとうございます。
言っていることがどんどん変わっていますが、一旦立ち止まって整理したほうがいいのではないですか?
質問者さんも何かしら試されているのでしょうが、何をどう試したのか分からず、結果だけ知らされてもこちらは、提示された情報が変わっていないのに結果が変わるというわけの変わらない状態にしかなりません。
最初から情報をまとめてみてください。
DataGridViewには何を表示しているのか(DataSourceにDataTableを設定しているとか)
「セルを不必要に増やした」とは何をしたのか
空白のセルはどのように作成されるのか等