C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: GridViewからチェックボックスのチェックがある行の削除


(過去ログ 55 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■30842 / inTopicNo.1)  GridViewからチェックボックスのチェックがある行の削除
  
□投稿者/ |ω・) (10回)-(2009/01/08(Thu) 10:22:23)

分類:[ASP.NET (C#)] 

お世話になります。

現在GridViewにチェックボックスが出るように設定し、チェックボックスに
チェックが入っている行を選択すると削除するというように行っているのですが、
コードの書き方が悪く、チェックが入っているレコード以下を全て削除してしまいます。

原因はわかっているのですが、思いついた対策法があまりよろしくなく、
もし宜しければ何かしら良い知恵をお借りできたらと思い投稿してみました。

以下コードになります。

dtにはGridViewで表示されているデータが代入されている

int x = dt.Rows.Count;
int count = 0;

while (count < x)
{
GridViewRow row = GridView1.Rows[count];
CheckBox check = (CheckBox)row.FindControl("checkbox1");

if (check.Checked)
{
DataRow dr = dt.Rows[count];
dr.Delete();

DataRow dr2 = dt2.Rows[count];
dr2.Delete();

//ここの処理が良くない
count--;
x--;
}
count++;
}



※思いついている対策法
配列等を宣言し、チェックが入っている行を記憶し終えたのち、テーブルの
レコードの下のほうから順にループして記憶していた行を削除していく。

二度手間な感じがして、他の人に対して余り見せれるコードではないと思うので、
何かいい方法がありましたらよろしくお願いします。
引用返信 編集キー/
■30868 / inTopicNo.2)  Re[1]: GridViewからチェックボックスのチェックがある行の削除
□投稿者/ いしだ (181回)-(2009/01/08(Thu) 14:48:23)
2009/01/08(Thu) 14:56:20 編集(投稿者)
最後から削除していったらどうですか?

for (int count = dt.Rows.Count; 0 < count; count--)
{
    GridViewRow row = GridView1.Rows[count - 1];
    CheckBox check = (CheckBox)row.FindControl("checkbox1");

    if (check.Checked)
    {
        DataRow dr = dt.Rows[count - 1];
        dr.Delete();

        DataRow dr2 = dt2.Rows[count - 1];
        dr2.Delete();
    }
}

引用返信 編集キー/
■30870 / inTopicNo.3)  Re[2]: GridViewからチェックボックスのチェックがある行の削除
□投稿者/ |ω・) (11回)-(2009/01/08(Thu) 14:56:35)
お返事有難うございます。
お教え頂いたとおり最後からチェックして行き完成しました。

有難うございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -