为GridView“删除”列添加确认对话框

如何为gridview控件里的“删除”列添加一个确认对话框?网上众说纷纭,大致见到了三种解决方案,现归纳如下:
1、继承Web.IO里的button控件,为其实现一个IPostback的接口用于回调,具体代码之复杂,只有作者自己想体会吧……
2、在gridview的ItemCreated事件中,遍历所有控件,若属于LinkButton类,且CommandName为“Delete”,就 将其添加一个属性,具体做法是将遍历到的Control强制类型转化为LinkButton,然后调用其Atributes.Add方法,添加一个 onclick事件内含confirm语句,即

lb.Attributes.Add( " onclick " , " return confirm('您真的要删除此行吗?') " );

3、目前已知的最简洁的方法 ,如图,在删除按钮的那一列属性里面,把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('您确认删除要删除么?')

即可。

 

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
方法一
ButtonLinkField.Text = " <div id=/ " del/ " οnclick=/ " JavaScript: return confirm( ' 确定删除吗? ' )/ " >删除</div> "

就OK了!

方法二:
1      protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e)
2       {
3          // 如果是绑定数据行
4          if (e.Row.RowType == DataControlRowType.DataRow)
5           {
6               if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)
7               {
8                   ((LinkButton)e.Row.Cells[ 6 ].Controls[ 0 ]).Attributes.Add( " onclick " , " javascript:return confirm('你确认要删除:/ "" + e.Row.Cells[1].Text + " / " 吗?') " );
9               }
10           }
11
12       }
方法三:
在GridView中我们可以直接添加一个CommandField删除列来删除某行信息。但为了避免误操作引起的误删除,在删除操作者让操作者再确认下,完后再进行删除。
首先我们给我们的GridView 添加一个模板列,如下:

<asp:TemplateField HeaderText="Delete" ShowHeader="False">
<ItemStyle ForeColor="Red" />
<ItemTemplate>
<asp:LinkButton ID="BtnDelete" runat="server" CausesValidation="False" CommandName="Delete"
Text="Delete"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>

其次我们给我们所添加的模板列添加:OnClientClick="return confirm('确认要删除此行信息吗?')" ,如下:

<asp:TemplateField HeaderText="Delete" ShowHeader="False">
<ItemStyle ForeColor="Red" />
<ItemTemplate>
<asp:LinkButton ID="BtnDelete" runat="server" CausesValidation="False" CommandName="Delete"
Text="Delete" OnClientClick="return confirm('确认要删除此行信息吗?')"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>

点击删除时就会先在客户端弹出“确认要删除吗?”对话框,一般我们确认删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值