質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

2527閲覧

検索して対象データがない場合に初期表示と同じ表示にさせたい

akari-5041

総合スコア3

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/07/14 03:20

編集2020/07/14 03:22

前提・実現したいこと

検索して対象データがない場合に初期表示の時と同じ表示にさせたいです。
DateGridViewのデザイナーで、dataGridView1.Rows.Add(27)と指定していますので、
初期表示の際には空白の行が27行表示されていて理想の表示ができていますが、
検索条件に条件を設定してデータ検索した後に、対象のデータがない場合に、
空白の行が27行表示されていてほしいのですが、表示されません。

該当のソースコード

' 検索ボタン押下時の処理 Sub ShowResultSet(reader As ICustomDataReader) Dim dt As DataTable Dim dr As DataRow 'データテーブル作成 dt = New DataTable() dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn1", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn2", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn3", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn4", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn5", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn6", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn7", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn8", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn9", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn10", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn11", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn12", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn13", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn14", GetType(String))) Dim i As Long i = 0 Do While reader.Read dr = dt.NewRow() dr(0) = reader.GetValue("dtlHinmokuCd") dr(1) = reader.GetValue("dtlHinmokuName") dr(2) = reader.GetValue("dtlKikaku") dr(3) = reader.GetValue("dtlNyukaSoko") dr(4) = reader.GetValue("dtlLotNo") dr(5) = reader.GetValue("dtlNyukoNo") Dim shohikigenrd As String = reader.GetValue("dtlShiyoukigen").ToString() If shohikigenrd.Length >= 8 Then dr(6) = shohikigenrd.Substring(2, 2) + "/" + shohikigenrd.Substring(4, 2) + "/" + shohikigenrd.Substring(6, 2) End If dr(7) = reader.GetValue("dtlSanchimei") dr(8) = reader.GetValue("dtlDenpyo") Dim nyukadaterd As String = reader.GetValue("dtlNyukaDate").ToString() If nyukadaterd.Length >= 8 Then dr(9) = nyukadaterd.Substring(2, 2) + "/" + nyukadaterd.Substring(4, 2) + "/" + nyukadaterd.Substring(6, 2) End If dr(10) = reader.GetValue("dtlShiiresakiCd") dr(11) = reader.GetValue("dtlShiiresakiName") dr(12) = reader.GetValue("dtlNyukaSuryo") dr(13) = reader.GetValue("dtlTani") dt.Rows.Add(dr) i = i + 1 Loop 'DataSourceにDataTableを設定 Me.dataGridView1.DataSource = dt If i = 0 Then     'データ無い時に空白の行を表示させたい。 dataGridView1.Columns.Add("", "dtlHinmokuCd") dataGridView1.Columns.Add("", "dtlHinmokuName") dataGridView1.Columns.Add("", "dtlKikaku") dataGridView1.Columns.Add("", "dtlNyukaSoko") dataGridView1.Columns.Add("", "dtlLotNo") dataGridView1.Columns.Add("", "dtlNyukoNo") dataGridView1.Columns.Add("", "dtlShiyoukigen") dataGridView1.Columns.Add("", "dtlSanchimei") dataGridView1.Columns.Add("", "dtlDenpyo") dataGridView1.Columns.Add("", "dtlNyukaDate") dataGridView1.Columns.Add("", "dtlShiiresakiCd") dataGridView1.Columns.Add("", "dtlShiiresakiName") dataGridView1.Columns.Add("", "dtlNyukaSuryo") dataGridView1.Columns.Add("", "dtlTani") dataGridView1.Rows.Add(27) MsgBox("対象データがありません。") End If reader.Close() End Sub

これを実行すると「コントロールがデータバインドされている時、DateGridViewの行コレクションにプログラムで行を追加することはできません」と表示されてしまいます。
なぜDateGridViewのデザイナーで、dataGridView1.Rows.Add(27)と指定いて設定が消えてしまうかも謎です。
宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DateGridViewに表示するデータは、データバインドか、DataGridView行の直接追加のどちらかしか使えません。
データバインドするなら27行分の空データをDataTableに入れるしかないでしょう。
そうでなければ、データバインドを止めて直接データを入れることになります。
(DataGridViewのDataSouceをNothingにすれば、直接データを入れられます。)

投稿2020/07/14 03:49

編集2020/07/14 03:52
kenshirou

総合スコア772

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akari-5041

2020/07/14 07:22

回答ありがとうございます。 教えていただいた通りにソースを書いてみましたがまたどうもうまくいかないです… Sub ShowResultSet(reader As ICustomDataReader) Dim dt As DataTable Dim dr As DataRow 'データテーブル作成 dt = New DataTable() dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn1", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn2", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn3", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn4", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn5", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn6", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn7", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn8", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn9", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn10", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn11", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn12", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn13", GetType(String))) dt.Columns.Add(New DataColumn("DataGridViewTextBoxColumn14", GetType(String))) Dim i As Long i = 0 Do While reader.Read dr = dt.NewRow() dr(0) = reader.GetValue("dtlHinmokuCd") dr(1) = reader.GetValue("dtlHinmokuName") dr(2) = reader.GetValue("dtlKikaku") dr(3) = reader.GetValue("dtlNyukaSoko") dr(4) = reader.GetValue("dtlLotNo") dr(5) = reader.GetValue("dtlNyukoNo") Dim shohikigenrd As String = reader.GetValue("dtlShiyoukigen").ToString() If shohikigenrd.Length >= 8 Then dr(6) = shohikigenrd.Substring(2, 2) + "/" + shohikigenrd.Substring(4, 2) + "/" + shohikigenrd.Substring(6, 2) End If dr(7) = reader.GetValue("dtlSanchimei") dr(8) = reader.GetValue("dtlDenpyo") Dim nyukadaterd As String = reader.GetValue("dtlNyukaDate").ToString() If nyukadaterd.Length >= 8 Then dr(9) = nyukadaterd.Substring(2, 2) + "/" + nyukadaterd.Substring(4, 2) + "/" + nyukadaterd.Substring(6, 2) End If dr(10) = reader.GetValue("dtlShiiresakiCd") dr(11) = reader.GetValue("dtlShiiresakiName") dr(12) = reader.GetValue("dtlNyukaSuryo") dr(13) = reader.GetValue("dtlTani") dt.Rows.Add(dr) i = i + 1 Loop Me.dataGridView1.DataSource = dt If i = 0 Then      ' データバインドを止めて直接データを入れる dataGridView1.DataSource = Nothing Me.dataGridView1.Rows.Add(27) MsgBox("対象データがありません。") End If reader.Close() End Sub エラー文としては先ほどと同じように「コントロールがデータバインドされている時、DateGridViewの行コレクションにプログラムで行を追加することはできません」と表示されてしまいます。
kenshirou

2020/07/14 07:38

i = 0ならば、そもそも Me.dataGridView1.DataSource = dt を行う必要はないんじゃないでしょうか。
akari-5041

2020/07/14 07:58

kenshirouさんのアドバイスを活かしてソースを変更してみたところ、できました!!!! If i = 0 Then   ' データバインドを止めて直接データを入れる dataGridView1.DataSource = Nothing Me.dataGridView1.Rows.Add(27) MsgBox("対象データがありません。") Else Me.dataGridView1.DataSource = dt End If reader.Close() ありがとうございます!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問