如何在不选中复选框的情况下按下删除按钮时在客户端显示错误消息
本文关键字:按钮 客户端 删除 显示 消息 错误 情况下 复选框 | 更新日期: 2023-09-27 17:58:40
当我没有在gridview
中选择checkbox
并按下删除按钮时,它会显示错误"没有选中复选框",但当我选择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]);
}
}
请运行此代码。
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;
}
}
}
我认为你必须使用
if (!Page.IsPostBack)
{
}
页面加载上的函数
lblError.Visible = true;
一旦将控件设置为可见,所有回发都将记住该控件是可见的,并将继续显示该控件。你有两个选择:
- 当没有错误时,在代码中显式设置
lblError.Visible = false;
- 将
.aspx
文件中的lblError
更改为将EnableViewState
设置为false
实际上,仔细看:您的逻辑还有其他问题需要解决。选中每一行,如果任何行的复选框未选中,则将lblError.Visible
设置为true
。根据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;