トップ回答者
datagridview で選択したデータがないにもかかわらず、rowcount=1 になる

質問
回答
-
そのrowcountというのはDataGridViewのRowCountプロパティのことでしょうか?あと、DataGridViewの一番に空欄で表示されている行がありますか?
そうであれば、それは追加のための行であり、その分が1とカウントされています。
追加する必要が無いなら、AllowUserToAddRowsプロパティをfalseにしてやればDataSouceに与えたデータ数と同じになるでしょう。あるいはDataGridViewのDataSourceプロパティに与えた元のデータは何かわかっているはずですから、その数を数えましょう。
元のデータが判らないという特殊な場合はRowsプロパティから得られるDataGridViewRowにはIsNewRowプロパティがあるので、
Dim count As Integer = Me.DataGridView1.Rows.OfType(Of DataGridViewRow).Where(Function(r) Not r.IsNewRow).Count Dim newRowCount As Integer = Me.DataGridView1.Rows.OfType(Of DataGridViewRow).Where(Function(r) r.IsNewRow).Count
のように行の種類を数えるという手もあります。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 編集済み gekkaMVP 2017年8月16日 12:29
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年8月17日 4:05
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年8月24日 2:16
-
select count(*) from テーブル名 where 条件
でレコード件数を求めた。
どのタイミングで上記のSQLを実行されるのかわかりませんが、もし、複数人で同時にデータベースを弄る可能性があるのであれば、取得するタイミングによってはDataGridViewに表示される件数と異なる可能性がありますので、ご注意下さい。
さて、上記のSQLで解決されたということであれば、お勧めはgekkaさんも書かれていますが、DataGridViewに表示する元のデータソースの行数を数えるのが一般的です。例えばデータテーブルであれば、その行数になります。
今一度gekkaさんの回答をお読みになって、そちらの方法を試されることをお勧めします。
また、基本的な考え方として、データの登録や削除はDataGridViewの行に対して行うのではなく、そのデータソース(例えばデータテーブル)に対して行うという感覚、すなわちDataGridViewはデータソースを弄るための窓口という感覚で考えて行かれると良いと思います。そうすれば、今回の場合も、データソースの行を数えるという発想に至ったはずです。★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年8月17日 4:05
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年8月24日 2:17
すべての返信
-
そのrowcountというのはDataGridViewのRowCountプロパティのことでしょうか?あと、DataGridViewの一番に空欄で表示されている行がありますか?
そうであれば、それは追加のための行であり、その分が1とカウントされています。
追加する必要が無いなら、AllowUserToAddRowsプロパティをfalseにしてやればDataSouceに与えたデータ数と同じになるでしょう。あるいはDataGridViewのDataSourceプロパティに与えた元のデータは何かわかっているはずですから、その数を数えましょう。
元のデータが判らないという特殊な場合はRowsプロパティから得られるDataGridViewRowにはIsNewRowプロパティがあるので、
Dim count As Integer = Me.DataGridView1.Rows.OfType(Of DataGridViewRow).Where(Function(r) Not r.IsNewRow).Count Dim newRowCount As Integer = Me.DataGridView1.Rows.OfType(Of DataGridViewRow).Where(Function(r) r.IsNewRow).Count
のように行の種類を数えるという手もあります。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 編集済み gekkaMVP 2017年8月16日 12:29
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年8月17日 4:05
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年8月24日 2:16
-
select count(*) from テーブル名 where 条件
でレコード件数を求めた。
どのタイミングで上記のSQLを実行されるのかわかりませんが、もし、複数人で同時にデータベースを弄る可能性があるのであれば、取得するタイミングによってはDataGridViewに表示される件数と異なる可能性がありますので、ご注意下さい。
さて、上記のSQLで解決されたということであれば、お勧めはgekkaさんも書かれていますが、DataGridViewに表示する元のデータソースの行数を数えるのが一般的です。例えばデータテーブルであれば、その行数になります。
今一度gekkaさんの回答をお読みになって、そちらの方法を試されることをお勧めします。
また、基本的な考え方として、データの登録や削除はDataGridViewの行に対して行うのではなく、そのデータソース(例えばデータテーブル)に対して行うという感覚、すなわちDataGridViewはデータソースを弄るための窓口という感覚で考えて行かれると良いと思います。そうすれば、今回の場合も、データソースの行を数えるという発想に至ったはずです。★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年8月17日 4:05
- 回答としてマーク 立花楓Microsoft employee, Moderator 2017年8月24日 2:17