2

選択checkboxしていないときにgridview削除ボタンを押すと、「チェックボックスが選択されていません」というエラーが表示されますが、その後、checkbox削除ボタンを選択してクリックすると、そのエラーが表示されても理由が​​わからないのですか? 私は、私が使用するデータベースを使用していませdatatablegridview

これが削除ボタンの私のコードです

protected void DeleteButton_Click(object sender, EventArgs e)
{

    var dt = (DataTable)ViewState["CurrentData"];

    if (dt == null)
    {
        return;
    }
    List<DataRow> rowsToDelete = new List<DataRow>();
    foreach (GridViewRow row in GridView1.Rows)
    {
        CheckBox cb = (CheckBox)row.FindControl("CheckBox1");
        if (cb != null && cb.Checked)
        {
            row.Visible = false;

            //remove row by its index as it should GridViewRow index == DataRow index
            //it is not the best way but from your code I dont have information how your GridView looks
            dt.Rows.RemoveAt(row.RowIndex);

            GridView1.DataSource = dt;
            GridView1.DataBind();

            GridView2.DataSource = dt;
            GridView2.DataBind();

            ViewState["CurrentData"] = dt;
        }
        else
        {
            lblError.Visible = true;
        }
        for (int i = 0; i < rowsToDelete.Count; i++)
        {
            dt.Rows.Remove(rowsToDelete[i]);
        }
    }
4

3 に答える 3

0

このコードを実行してください。

 protected void Button2_Click(object sender, EventArgs e)
 {
    var dt = (DataTable)ViewState["CurrentData"];

    if (dt == null)
    {
        return;
    }

    foreach (GridViewRow row in GridView1.Rows)
    {
        CheckBox cb = (CheckBox)row.FindControl("CheckBox2");
        if (cb != null && cb.Checked)
        {
            Label1.Visible = false;
            dt.Rows.RemoveAt(row.RowIndex);
            GridView1.DataSource = dt;
            GridView1.DataBind();

            GridView2.DataSource = dt;
            GridView2.DataBind();

            ViewState["CurrentData"] = dt;
        }
        else if (cb.Checked == false)
        {
            Label1.Visible = true;
        }
    }

}
于 2013-02-09T10:56:38.477 に答える
0

私はあなたが使用する必要があると思います

if (!Page.IsPostBack)
{

}

ページ読み込み時の関数

于 2013-02-09T10:34:55.373 に答える
0
lblError.Visible = true;

コントロールを表示に設定すると、すべてのポストバックはコントロールが表示されていることを記憶し、引き続きコントロールを表示します。次の 2 つのオプションがあります。

  • lblError.Visible = false;エラーがない場合は、コードで明示的に設定します。
  • に設定するようにファイルを変更lblErrorします。.aspxEnableViewStatefalse

実際、よく見ると、ロジックには解決する必要がある他の問題もあります。各行をチェックし、いずれかの行のチェックボックスがオフになっている場合は、に設定lblError.Visibletrueます。のテキストに基づいて、すべての行のチェックボックスがオフlblErrorになっている場合にのみ表示する必要があります。

bool allUnchecked = true;
foreach (GridViewRow row in GridView1.Rows)
{
    CheckBox cb = (CheckBox)row.FindControl("CheckBox1");
    if (cb != null && cb.Checked)
    {
        /* your existing code here */

        allUnchecked = false;
    }
    /* no else branch here */

    for (int i = 0; i < rowsToDelete.Count; i++)
    {
        dt.Rows.Remove(rowsToDelete[i]);
    }
}
lblError.Visible = allUnchecked;
于 2013-02-09T10:37:59.430 に答える