如何在没有选中复选框的情况下按删除按钮时在客户端显示错误消息

时间:2013-02-09 10:32:01

标签: c# asp.net gridview textbox

当我未在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]);
        }
    }

3 个答案:

答案 0 :(得分:0)

我认为你必须使用

if (!Page.IsPostBack)
{

}

页面加载功能

答案 1 :(得分:0)

lblError.Visible = true;

将控件设置为可见后,所有回发都会记住控件可见并将继续显示控件。您有两种选择:

  • 如果没有错误,请在代码中明确设置lblError.Visible = false;
  • 更改lblError文件中的.aspx,将EnableViewState设置为false

实际上,仔细观察:您的逻辑还有其他需要解决的问题。您检查每一行,如果任何行未选中其复选框,则将lblError.Visible设置为true。根据{{​​1}}的文字,您只需在所有行未选中其复选框时才能显示该文字。

lblError

答案 2 :(得分: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;
        }
    }

}