能否在DataGrid中利用模板列中的删除按钮写确认删除弹出窗口?
在DataGrid中利用模板列中的删除按钮写确认删除弹出窗口
DataGrid中的删除模板列中的代码如下:
<asp:ButtonColumn Text="<img src=img/delete.gif border=0 alt=Delete />" HeaderText="删除" CommandName="Delete"></asp:ButtonColumn>
我在后台程序中添加了 DataGrid1_ItemCreated代码:
if(e.Item.FindControl("Delete") != null
LinkButton lbtn = (LinkButton)(e.Item.Cells[7].FindControl("Delete"));
lbtn.Attributes.Add("onclick", "javascript:return window.confirm('真的删除?');");
但是这个判断的条件总满足不了,所以JAVA代码不能添加上。原因是ButtonColumn 是没有ID的。
我也查询了CSDN中以前类似问题,是否不能用ButtonColumn模板列中的delete,只能另外写TemplateColumn,在其中添加ItemTemplate,在其中添加button来实现?
问题点数:20、回复次数:17Top
1 楼aquariusdeng(无泪有伤之新手上路)回复于 2005-05-11 16:47:03 得分 0
不知道是不是巧合,虽然没听说过不可以,但是没看到过这样用的
我看到的,以及曾经使用的,都是用的模板列,在其中添加Button
不过,模板列用起来并不比按钮列麻烦多少啊Top
2 楼blackhero(黑侠客)回复于 2005-05-11 16:56:29 得分 5
HyperLinkColumn linkcolumn2=new HyperLinkColumn();
linkcolumn2.DataNavigateUrlField="actid";
linkcolumn2.HeaderText="删除";
linkcolumn2.Text="删除";
linkcolumn2.DataNavigateUrlFormatString="del.aspx?actid={0}";
linkcolumn2.HeaderStyle.Wrap=false;
linkcolumn2.ItemStyle.Wrap=false;
linkcolumn2.Visible=true;
linkcolumn2.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
linkcolumn2.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
this.DataGrid1.Columns.Add(linkcolumn2);
del.aspx
private void Page_Load(object sender, System.EventArgs e)
{
//取值
this.Session["actid"]=this.Request.Params["actid"].ToString();
//先判断是否真的删除
this.Response.Write("<script language='javascript'>");
this.Response.Write("aa=window.confirm('您确定要删除帐号"+this.Request.Params["actid"].ToString()+"?');");
this.Response.Write("if(aa==false){");
this.Response.Write("window.location.href='usrlist.aspx'");
this.Response.Write("}");
this.Response.Write("if(aa==true)");
this.Response.Write("{");
this.Response.Write("window.location.href='del_usr.aspx'");
this.Response.Write(" } ");
this.Response.Write("</script>");
//在此处放置用户代码以初始化页面
}
del_usr.aspx
private void Page_Load(object sender, System.EventArgs e)
{
if(this.Session["logid"]==null)
{
this.Response.Write("<script language='javascript'>top.location.href='../../index.aspx';</script>");
this.Response.End();
}
//连接数据库
string connstr=System.Configuration.ConfigurationSettings.AppSettings["sqllink"];
SqlConnection conn=new SqlConnection(connstr);
conn.Open();
try
{
string sql=""; //执行sql语句
sql="delete from usract where actid='"+this.Session["actid"].ToString()+"'";
SqlCommand cmd=new SqlCommand(sql,conn);
SqlCommand cmd1= new SqlCommand("PRO_PlanAlmEvt_INTOPlanAlmEvtGET",conn); //添加用户(PRO_PlanAlmEvt_INTOPlanAlmEvtGET为存储过程的名字)
SqlCommand cmd2=new SqlCommand("PRO_CONTLIST_INTOCONTLISTGET",conn); //执行存储过程PRO_CONTLIST_INTOCONTLISTGET
SqlCommand cmd3=new SqlCommand("PRO_CPZONE_INTOCPZONEGET",conn); //执行存储过程(PRO_CPZONE_INTOCPZONEGET
SqlCommand cmd4=new SqlCommand("PRO_USRACT_INTOUSRACTGET",conn);
cmd1.CommandType=CommandType.StoredProcedure; //是存储过程
cmd2.CommandType=CommandType.StoredProcedure;
cmd3.CommandType=CommandType.StoredProcedure;
cmd4.CommandType=CommandType.StoredProcedure;
cmd1.Parameters.Add("@ACTID",this.Session["actid"].ToString()); //为命令行添加参数
cmd2.Parameters.Add("@ACTID",this.Session["actid"].ToString());
cmd3.Parameters.Add("@ACTID",this.Session["actid"].ToString());
cmd4.Parameters.Add("@ACTID",this.Session["actid"].ToString());
cmd.ExecuteNonQuery(); //执行sql语句
cmd1.ExecuteNonQuery(); //执行存储
cmd2.ExecuteNonQuery();
cmd3.ExecuteNonQuery();
cmd4.ExecuteNonQuery();
this.Response.Write("<script>alert('删除成功')</script>"); //显示
this.Response.Write("<script>window.location.href='usrlist.aspx'</script>"); //跳页
}
catch(Exception E)
{
this.Response.Write(E.ToString());
}
finally
{
conn.Close();
}
// 在此处放置用户代码以初始化页面
}
Top
3 楼niuniu23_1982(潜行者)回复于 2005-05-11 17:02:11 得分 5
if((e.Item.ItemType==ListItemType.AlternatingItem)||(e.Item.ItemType==ListItemType.Item))
{
LinkButton lbtn = (LinkButton)(e.Item.Cells[7].FindControl("Delete"));
lbtn.Attributes.Add("onclick", "javascript:return window.confirm('真的删除?');");
}
就可以了Top
4 楼vzxq(灵感人)回复于 2005-05-11 17:20:41 得分 5
<asp:ButtonColumn Text="<div onclick="return confirm('确定要删除吗?')">删除</div>" HeaderText="删 除"
CommandName="Delete"></asp:ButtonColumn>Top
5 楼chenxy80(陈陈)回复于 2005-05-11 17:23:47 得分 0
TO: blackhero(黑侠客),呵呵,不用帖这么多代码吧,我说得和DataGrid有关,你的代码好像没有什么关系啊。
TO: niuniu23_1982(牛牛) ,if条件是满足了,但e.Item.Cells[7].FindControl("Delete")这个结果是NULL,所以LinkButton lbtn = (LinkButton)(e.Item.Cells[7].FindControl("Delete"));出错。Top
6 楼gaochao79(www.informe.cn)回复于 2005-05-11 17:28:32 得分 0
当然能,我就这个问题google过,结果又把我引导到csdn来了,csdn里有这个文章的Top
7 楼hchxxzx(NET?摸到一点门槛)回复于 2005-05-11 17:31:09 得分 0
否认是模板列,还是按钮列,都可以添加删除脚本,楼上的那么多兄弟.....
马上下班了,晚上帮你写一下Top
8 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-05-11 17:32:05 得分 0
((LinkButton)di.Cells[7].Controls[0]).Attributes.Add("onclick","return confirm('delete?');");
buttoncolumn没有id只能通过索引取Top
9 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-05-11 17:32:29 得分 0
((LinkButton)e.Item.Cells[7].Controls[0]).Attributes.Add("onclick","return confirm('delete?');"); buttoncolumn没有id只能通过索引取
Top
10 楼chenxy80(陈陈)回复于 2005-05-11 17:34:16 得分 0
to:vzxq(灵感人)
谢谢,实现了,而且短小精悍,强,但是text中的那段是什么语言啊,
我是福州的程序员,
QQ:21566939,MSN:chenxyok@hotmail.comTop
11 楼yipiaoqingshui(一瓢清水)回复于 2005-05-11 17:43:01 得分 5
.cs里面这样写
#region 项创建事件
/// <summary>
/// 项创建事件
/// </summary>
/// <param name="sender">事件对象</param>
/// <param name="e">事件参数</param>
private void dgrdFileTemplateType_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//鼠标事件
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
e.Item.Attributes.Add("onmouseover","RowMouseOver(this);");
e.Item.Attributes.Add("onmouseout","RowMouseOut(this);");
e.Item.Attributes.Add("onclick","RowMouseClick(this);");
}
//创建删除按钮客户端事件
if(e.Item.FindControl("lbtnRemove_Power_3282") != null)
{
((LinkButton)e.Item.FindControl("lbtnRemove_Power_3282")).Attributes.Add("onclick","return RemoveFileTemplateType();");
}
}
#endregion
记得绑定事件
页面加段JS代码
//删除参数类型
function RemoveFileTemplateType()
{
//停止冒泡
event.cancelBubble = true;
//执行删除
if(window.confirm("确认要删除吗?"))
{
return true;
}
else
{
return false;
}
ps:偶也是福州的..嘻嘻.这个比较简单.我们公司都这样用...起码后台代码量少点.
性能很重要.Top
12 楼hchxxzx(NET?摸到一点门槛)回复于 2005-05-11 17:52:51 得分 0
//先绑定控件
this.myGrid.DataSource = this.myTab;
this.myGrid.DataKeyField = "usr_id";
this.myGrid.DataBind();
//绑定之后循环此控件,为每一个按钮添加事件
int i=0;
int mycount = this.myGrid.Items.Count;
for(i=0;i<mycount;i++)
{
//为模板列(删除)添加事件
Button butdelete = (Button)this.myGrid.Items[i].FindControl("butdelete");
butdelete.Attributes.Add("onclick","return(confirm('确认要删除记录吗?'));");
//为按钮列(删除)添加事件
LinkButton linkdelete = (LinkButton)this.myGrid.Items[i].Cells[7].Controls[0];
linkdelete.Attributes.Add("onclick","return(confirm('确认要删除记录吗?'));");
}
Top
13 楼wd_terry(IQ+EQ=QQ)回复于 2005-05-11 17:59:12 得分 0
我的BLOG里面也有,能够解决的Top
14 楼silentwins(原谅我当天不懂得珍惜只知任性...)回复于 2005-05-11 18:49:29 得分 0
这个要mark一下Top
15 楼silentwins(原谅我当天不懂得珍惜只知任性...)回复于 2005-05-11 19:11:58 得分 0
用了 vzxq(灵感人) 的代码后,OnItemCommand那个过程怎么写?Top
16 楼chenxy80(陈陈)回复于 2005-05-12 09:11:37 得分 0
用了 vzxq(灵感人) 的代码后,后台程序可以不用写了,只需写DataGrid1_DeleteCommand的内容就行了,结帖。Top
17 楼cx12cn(攻台保钓收南沙!!)回复于 2005-05-12 13:17:32 得分 0
markTop




