tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGridViewでの複数行削除
記事No5221
投稿日: 2007/03/28(Wed) 22:22
投稿者かばとっと
はじめまして。掲示板に書くのは初めてですが,いつも参考にさせていただいております。
早速ですみませんが,以下のことで悩んでおります。

VB2005において,DataGridView(BindingSourceにAccessのデータベースを指定,追加禁止)で,
複数セル選択可にした状態で,選択された行をすべて削除するコードを以下のように記述しま
した。

For Each sRow As DataGridViewRow In Me.DataGridView1.SelectedRows
    Me.DataGridView1.Rows.Remove(sRow)
Next

この方法で通常のデータ削除は問題なく行えるのですが,すべてのセルを選択した状態で実行
すると,「現在の項目がないため,一覧から現在の項目を削除できません。」とのエラーが出
ます。
全データが削除されてしまったために,カレントセルもなくなってしまった関係なのではない
かと思っておりますが,いろいろ試行錯誤しても解決に至らず困っております。

VB2005を始めたばかりの初心者なので,何か見落としや勘違いをしているものと思っておりま
すが,解決方法について教えていただければ幸いです。

[ツリー表示へ]
タイトルRe: DataGridViewでの複数行削除
記事No5222
投稿日: 2007/03/28(Wed) 22:53
投稿者花ちゃん
> For Each sRow As DataGridViewRow In Me.DataGridView1.SelectedRows
>     Me.DataGridView1.Rows.Remove(sRow)
> Next

下記のようにindex の大きい方から小さい方へと削除してみては。
htp://hanatyan.sakura.ne.jp/dotnet/list02.htm#no8

[ツリー表示へ]
タイトルRe^2: DataGridViewでの複数行削除
記事No5225
投稿日: 2007/03/28(Wed) 23:38
投稿者かばとっと
教えていただいた内容を参考にして,以下のコードでなんとかなりました。

Dim i As Integer
  For i = Me.DetaGridView1.Rows.Count - 1 To 1 Step -1
    If Me.DetaGridView1.Rows(i).Selected = True Then
    Me.DetaGridView1.Rows.RemoveAt(i)
  End If
Next

For i= 〜 のところ,To 0 だと前と同様のエラーが出て,To 1 だとノーエラーでした。DetaGridV
iewの最初の行数は 0 なので,To 0 かと思ったのですが,なぜ 1 でOKなのかが私には謎でした。

ともあれ,おかげさまで目的は達成されたました。ありがとうございました。

[ツリー表示へ]
タイトルRe^3: DataGridViewでの複数行削除
記事No5226
投稿日: 2007/03/29(Thu) 00:21
投稿者かばとっと
先ほどのは総当りのため処理速度に問題があるので,以下のように変えました。
            Dim i As Integer
            Dim id As Integer
            For i = Me.DataGridView1.SelectedRows.Count - 1 To 1 Step -1
                id = Me.DataGridView1.SelectedRows(i).Index
                Me.DataGridView1.Rows.RemoveAt(id)
            Next

ヒントをいただき大変参考になりました。

[ツリー表示へ]