当我未在checkbox
中选择gridview
并按删除按钮时,显示错误"未选中复选框"但是在那之后,当我选择checkbox
并点击删除按钮时,它仍然显示错误不知道为什么?
我没有使用任何数据库我只使用datatable
和gridview
。
这是关于删除按钮的代码
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]);
}
}
答案 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;
}
}
}