GridView删除行方法及改进
刚刚有同学过来问关于GridView删除行的方法,突然想不起来还得打开自己的项目查看,比较麻烦,特写此文章以做记录,以防下次又忘记!
未对网上资料进行搜索和验证先写自己的方法吧。
- 1.使用GridView的OnRowDeleting事件的方法
前端代码:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDeleting="GridView1_RowDeleting" BorderColor="Black" OnRowEditing="GridView1_RowEditing" Width="100%" Font-Size="12px" OnRowCommand="GridView1_RowCommand"> <Columns> //其他字段省略 <asp:CommandField HeaderText="删除" ShowDeleteButton="True" /> <asp:TemplateField HeaderText="编辑"> <ItemTemplate> <asp:Button ID="btnEditOrder" selfAttribute='<%#Eval("UserID")%>' runat="server" Text='编 辑' OnClientClick = "OpenForm(this,'Edit');"/> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
前段通过OnRowDeleting="GridView1_RowDeleting" 绑定后台事件方法。
后台代码:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataSet myds = UserInfoPoxy.UserInfoBLL.GetALL(); GridView1.DataSource = myds; GridView1.DataKeyNames = new string[] { "UserID" };//设置DataKey对应字段名称 GridView1.DataBind(); } } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { Response.Redirect("/UserEdit.aspx?a=" + GridView1.DataKeys[e.NewEditIndex].Value.ToString());//通过DataKeys[e.NewEditIndex]直接获得ID Bind();//重新绑定 }
最终展示的HTML是<a>标签形式,不是button形式,这个方法有一个缺点就是当用户点击删除时会立刻删除没有弹出提示框。
针对这个缺陷在通过在网上搜索发现园中有方法弥补:http://www.cnblogs.com/sufei/archive/2009/06/10/1500254.html
具体方式如下:
目前已知的最简洁的方法,如图,在删除按钮的那一列属性里面,把DeleteText属性设为
<div id="de" onclick="JavaScript:return confirm('确定删除吗?')">删除</div> 这个太强了,赞一个。
可问题是,.net输出的html代码如下:
<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView1','Delete$0')" style="color:#4A3C8C;"><div id="de" onclick="JavaScript:return confirm('确定删除吗?')">删除</div></a>
为什么内层<div>的onclick事件所返回的bool值能影响到外层<a>标签的的语句是否被执行呢?
仔细想了想,以前用asp直接写的删除标签是这个样子的:
<a href="deleteUser.asp?id=xxx" onclick="return confirm('确定删除吗?')">删除</a>
也就是说,onclick事件接受一个bool值,其决定了click事件是否被触发。若click事件没有被触发,href内含的跳转动作就不会生效。同理,之前的那段代码中,<div>在<a>中,只有先触发<div>的click事件,<a>的跳转动作才会生效。而我们在<div>的onclick事件中若选择为其赋值false,随即取消了<div>的click事件,也同时取消了<a>的跳转。
之后,新的问题又来了。如果我们的CommandField中ButtonType是Button的话,这段代码就失效了。我想了下,可以通过将其转换为模板列的方式来解决。
先将该字段转换成模板,然后编辑这个模板列,选中用于删除的Button,将其onClientClick属性设为
return confirm('您确认删除要删除么?')
即可。

浙公网安备 33010602011771号