asp.net 多选删除功能

Name_456 2011-03-18 09:27:16
请高手帮帮忙调试半天,也不知道错在那里老是走到这里
CheckBox cbox = (CheckBox)GridView1.Rows[i].Cells[1].FindControl("CheckBox1");

if (cbox.Checked == true)
{
。。。。。。。。
}
为 false





前台代码

<body runat="server">
<form id="form1" runat="server">
<div id="divId" runat ="server">
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox2_CheckedChanged" Text="全选" />
<asp:Button ID="shanchu" runat="server" Text="删除" OnClick="shanchu_Click" OnClientClick="return confirm('你确定要删除吗?')" /> 
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="导出exl" />

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White"
BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" CssClass="gv"
DataKeyNames="UserName" GridLines="Horizontal" OnRowCommand="GridView1_RowCommand"
OnRowDeleting="GridView1_RowDeleting" Width="85%" OnRowDataBound="GridView1_RowDataBound">
<RowStyle BackColor="#E7E7FF" CssClass="gvitem" ForeColor="#4A3C8C" />
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
<HeaderStyle BackColor="#4A3C8C" CssClass="gvheader" Font-Bold="True" ForeColor="#F7F7F7" />
<AlternatingRowStyle BackColor="#F7F7F7" CssClass="gvalter" />

<Columns>

<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="UserName" HeaderText="用户名" />
<asp:BoundField DataField="RealName" HeaderText="真实名称" />
<asp:TemplateField HeaderText="用户性别" SortExpression="Six">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Six") %>'></asp:TextBox>
</EditItemTemplate>

<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Six").ToString()=="0"?"男":"女"%>'></asp:Label>

</ItemTemplate>
</asp:TemplateField>

<asp:BoundField DataField="UnitName" HeaderText="单位名称" />

<asp:BoundField DataField="Addres" HeaderText="地址" />
<asp:BoundField DataField="OrgCode" HeaderText="组织结构代码" />

<asp:BoundField DataField="ZipCode" HeaderText="邮编" />

<asp:BoundField HeaderText="联系电话" DataField="PhoneName"/>

<asp:ButtonField CommandName="mod" HeaderText="详情" Text="详情" />
<%-- <asp:CommandField HeaderText="删除" ShowDeleteButton="True" />--%>
<asp:TemplateField HeaderText="删除 " ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Delete" Text="删除" OnClientClick="return confirm('你确定要删除吗?')"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
未发现重复数据
</EmptyDataTemplate>
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
</asp:GridView>

</div>
</form>
</body>



后台代码
protected void Button1_Click(object sender, EventArgs e)
{


bool Choose = false; //用于标记GridView中任意CheckBox控件是否被选中
bool Wrong = false; //用于标记删除GridView中某一行的数据时是否失败
string msg = ""; //用于记录当删除失败时存储的错误信息

//遍历GridView所有行
UserManger userManger = new UserManger(); ; //此为Bll层类,根据你的需要自行更改
for (int i = 0; i < this.GridView1.Rows.Count - 1; i++)
{
//如果某一行的CheckBox被选中,则执行删除操作
CheckBox cbox = (CheckBox)GridView1.Rows[i].Cells[1].FindControl("CheckBox1");

if (cbox.Checked == true)
{
Choose = true;
//获取要被删除的记录id
string userName = GridView1.DataKeys[i].Value.ToString();
int row = userManger.DeleteUser(userName); //调用bll删除的方法
if (row > 0) //请自行更改
{
Wrong = true;
msg = msg + "第" + (i + 1) + "行删除失败!";
continue;
}
}
}
//校验
if (Choose == false)
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('没有任何选项被选中,无法删除!');</script>");
return;
}
if (Wrong == true)
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('" + msg + "请联系管理员');</script>");
return;
}
GridView1.DataSourceID = "";
GridView1.DataSource = userManger.GetUsersAll(); // 自行更改
GridView1.DataBind();

}
...全文
341 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_dongyanguo 2011-03-18
  • 打赏
  • 举报
回复
自己设置断点,看哪里出错了,然后加上楼上的回复试试看,代码乱遭的,不爱看。
IT0329 2011-03-18
  • 打赏
  • 举报
回复
lovell512 2011-03-18
  • 打赏
  • 举报
回复
前台设置:GridView的 DataKeyNames属性值为UserName;
后台代码:string userName = GridView1.DataKeys[i].Value.ToString();
amandag 2011-03-18
  • 打赏
  • 举报
回复
CheckBox cbox = (CheckBox)GridView1.Rows[i].Cells[1].FindControl("CheckBox1");
==
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");

根本不需要Cells
cm_boy 2011-03-18
  • 打赏
  • 举报
回复
还有,绑定数据的时候,建议采用<td>Eval(“字段”)</td>不然,看了眼花。。。每次都看一堆。。
cm_boy 2011-03-18
  • 打赏
  • 举报
回复
二楼正解,三楼错误。。。。没有指定到哪一个单元格的。。只指定到行。

CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");没有cell[]
嘴哥臭鼬 2011-03-18
  • 打赏
  • 举报
回复
索引从0开始,你的CheckBox在第一列,索引应该是0,Cells[0]
zq32206124 2011-03-18
  • 打赏
  • 举报
回复
for (int i = 0; i < this.GridView1.Rows.Count - 1; i++)
{
//如果某一行的CheckBox被选中,则执行删除操作
CheckBox cbox = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

}

改成这样看一下,如果还是错
再改成
for (int i = 1; i < this.GridView1.Rows.Count - 1; i++)
{
//如果某一行的CheckBox被选中,则执行删除操作
CheckBox cbox = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

}
IHandler 2011-03-18
  • 打赏
  • 举报
回复
索引从0开始,你的CheckBox在第一列,索引应该是0,Cells[0]
IHandler 2011-03-18
  • 打赏
  • 举报
回复
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");

天下在我心 2011-03-18
  • 打赏
  • 举报
回复
建议你全选按钮用js来实现
Name_456 2011-03-18
  • 打赏
  • 举报
回复
谢谢大家
一切为了你 2011-03-18
  • 打赏
  • 举报
回复
和普通删除没什么区别 ,无非就来个循环!!!
Sampson890727 2011-03-18
  • 打赏
  • 举报
回复
foreach (GridViewRow item in GridView1.Rows)
{
CheckBox cb = item.FindControl("ChekB") as CheckBox;
if (cb.Checked)
{
HiddenField hidid = item.FindControl("Hidd") as HiddenField;
int id = int.Parse(hidid.Value.ToString());
WebNewsInfoManager.Delete(id);

}
}
syn07471 2011-03-18
  • 打赏
  • 举报
回复
看看是不是页面回发是把Gridview重新绑定了,
在这里绑定Gridview
if(!IsPostBack)
{
BindGridView();
}
duyayu1987 2011-03-18
  • 打赏
  • 举报
回复
<asp:CheckBox ID="chkSelect" runat="server" onclick="return chkSelect_onclick(this)" Text='<%$Resources:WPMResource,WPM_WarAreaReplace%>'/>

onclick事件是"return chkSelect_onclick(this)" ,我上面写错了,呵呵
duyayu1987 2011-03-18
  • 打赏
  • 举报
回复
新建一个.aspx页面,里面代码如下:


<asp:GridView ID="GridView1" DataKeyNames="F_ID" runat="server" AutoGenerateColumns="false"
Width="100%" BorderWidth="1px">

<Columns>

<asp:TemplateField HeaderText='名称' >
<ItemTemplate>
(此处label标签里绑定你的主键ID,即你要删除一条记录的唯一标识)
<asp:Label ID="lb" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, F_ID>'></asp:Label>
<%# DataBinder.Eval(Container.DataItem, "F_Name")%>

</ItemTemplate>

</asp:TemplateField>


<asp:TemplateField>
<HeaderTemplate>
<input id="chkAll" type="checkbox" onclick="return chkAll_onclick()" value="全选"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" onclick="change(this);" Text='<%$Resources:WPMResource,WPM_WarAreaReplace%>'/>
</ItemTemplate>

</asp:TemplateField>

</Columns>
</asp:GridView>
<asp:Button btnDeleterunat="server" Text='删除' OnClientClick="javascript:return confirm('确认操作');"
onclick="btnDelete_Click"/>


然后在页面的head标签之间放入一段(实现全选和反选)的js代码,如下:
<script language="JavaScript" type="text/javascript">
function chkAll_onclick()
{
var obj = document.all.tags("INPUT");
if(window.document.getElementById("chkAll").checked==true)
{

for(i=0;i<obj.length;i++)
{
if(obj[i].type=="checkbox")
{

obj[i].checked = true;
}
}
}
else
{
for(i=0;i<obj.length;i++)
{
if(obj[i].type=="checkbox")
{

obj[i].checked = false;
}
}
}
}

function chkSelect_onclick(chkSelect)
{
if(chkSelect.checked==true)
{
var obj = document.all.tags("INPUT");
var j=0;
for(i=0;i<obj.length;i++)
{
if(obj[i].type=="checkbox" && obj[i].id!='chkAll' && obj[i].checked==false)
{
j++;
break;
}
}

if(j==0)
{
window.document.getElementById ("chkAll").checked=true;
}
}
else
{
window.document.getElementById ("chkAll").checked=false;
}
}
</script>

最后批量删除的那个按钮事件了这么写,如下:
protected void btnDelete_Click(object sender, EventArgs e)
{
//删除的button按钮事件里
Label lb= null;
CheckBox cb = null;
bool t = false;
foreach (GridViewRow row in this.GridView1.Rows)
{
lb = (Label)row.FindControl("lb");
cb = (CheckBox)item.FindControl("chkSelect");

int F_ID= Convert.ToInt32(lb.Text);
if (cb.Checked)
{
Delete(F_ID);
t = true;
}

}
if (t == false)
{
//输出请选择要删除的记录
}
else
{

this.WarAreaSelectList();//这是绑定你显示绑定列表的方法
//然后在这里输出删除成功的提示
}

}
chengjia2284 2011-03-18
  • 打赏
  • 举报
回复
for (int i = 1; i < this.GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");
}
cf370697816 2011-03-18
  • 打赏
  • 举报
回复
建议用批量删除函数
private void DeleteBatch()
{
string[] arrID = txtIDS.Value.Split(',');
for (int i = 0; i < arrID.Length; i++)
{
bll.Delete(arrID[i]);
}

}
zhixuan414107 2011-03-18
  • 打赏
  • 举报
回复
改成

for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
//如果某一行的CheckBox被选中,则执行删除操作
CheckBox cbox = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

}

62,253

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧