gpt4 book ai didi

c# - 使用复选框选择 gridview 中的所有行并在单击按钮时删除

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:10 25 4
gpt4 key购买 nike

我在 GridView 标题中有一个 ckeck 框字段。选中此复选框时所有复选框在 GridView 中被选中。现在我想删除按钮点击时的所有行。

我的aspx页面中复选框的代码如下:

 <HeaderTemplate>
Select All: <asp:CheckBox ID="chkboxSelectAll" AutoPostBack="true" OnCheckedChanged="chkboxSelectAll_CheckedChanged"
runat="server"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkEmp" runat="server"></asp:CheckBox>
</ItemTemplate></asp:TemplateField>

在我后面的代码中,我已经尝试过这个但它不起作用:同样在我的 GridView 中 DataKeyNames="id"和 bindgrid() 方法工作正常。

用于选择所有行:

 protected void chkboxSelectAll_CheckedChanged(object sender, EventArgs e)
{
CheckBox ChkBoxHeader = (CheckBox)Grd.HeaderRow.FindControl("chkboxSelectAll");
foreach (GridViewRow row in Grd.Rows)
{
CheckBox ChkBoxRows = (CheckBox)row.FindControl("chkEmp");
if (ChkBoxHeader.Checked == true)
{
ChkBoxRows.Checked = true;
}
}

用于删除所有选中的行

 protected void btn_click(object sender, EventArgs e)
{
CheckBox ChkBoxHeader = (CheckBox)Grd.HeaderRow.FindControl("chkboxSelectAll");

foreach (GridViewRow row in Grd.Rows)
{
// Only look in data rows, ignore header and footer rows
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox ChkBoxRows = (CheckBox)row.FindControl("chkEmp");

if (ChkBoxHeader.Checked == true)
{
ChkBoxRows.Checked = true;

var id = Grd.DataKeys[row.RowIndex].Value;
SqlConnection con = new SqlConnection(constr);
string qry = "delete from empdetail where id=@id";
SqlCommand cmd = new SqlCommand(qry, con);
cmd.Parameters.AddWithValue("@id", id);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
bindgrid();
}

}
}
}

请帮助我。我得到的错误是“索引超出范围。必须是非负的并且小于集合的大小。参数名称:索引”

最佳答案

您的第一个问题是您正在搜索 chkEmp 复选框,但它不存在于标题行中,因为 foreach (GridViewRow row in Grd.Rows) 将遍历网格中的所有行(包括页眉、数据和页脚行)。

GridView 标记中的 ItemTemplate 适用于 DataRow 类型的行,因此您需要将对 chkEmp 的搜索限制为仅数据行,像这样:

protected void chkboxSelectAll_CheckedChanged(object sender, EventArgs e)
{
CheckBox ChkBoxHeader = (CheckBox)Grd.HeaderRow.FindControl("chkboxSelectAll");

foreach (GridViewRow row in Grd.Rows)
{
// Only look in data rows, ignore header and footer rows
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox ChkBoxRows = (CheckBox)row.FindControl("chkEmp");

if (ChkBoxHeader.Checked == true)
{
ChkBoxRows.Checked = true;

var id = Grd.DataKeys[row.RowIndex].Value;
SqlConnection con = new SqlConnection(constr);
string qry = "delete from empdetail where id=@id";
SqlCommand cmd = new SqlCommand(qry, con);
cmd.Parameters.AddWithValue("@id", id);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
bindgrid();
}
else
{
ChkBoxRows.Checked = false;
}
}
}
}

关于c# - 使用复选框选择 gridview 中的所有行并在单击按钮时删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20104391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com