none
求助为gridview中的button添加确认对话框的问题 RRS feed

  • 问题

  • 在gridview中添加了每一行都有一个button用来执行自己写的代码来删除当前行,因为某些需求,该button的CommandArgument已经绑定了其他的数据,不能在绑定行号,而且也不能直接在aspx页面中为button写onclick,因为并不是在所有情况下点击button都要弹出确认对话框.
    具体情况就是想在
    protected void gv_xxx_RowCommand(object sender, GridViewCommandEventArgs e)
    {
                  xxxx
                  if (e.CommandName == "Del")
                  {
                           if(xxxx)
                           {
                                   xxxx
                           }
                           else
                           {
                                   在这里添加代码实现点击这个button而弹出确认对话框,确认之后执行下面aaaa,bbbb等代码,不确认就跳出
                                   aaaa
                                   bbbb
                           }
                  }
    }

    很头疼..想了半天弄不出来..求高手帮忙..
    2010年3月11日 6:32

答案

  • 你好!

    添加确定删除框,应该在 RowDataBound 事件中处理。如下:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Button deleteButton = e.Row.FindControl("btnDelete") as Button;
    
            if (deleteButton != null)
                deleteButton.Attributes["onclick"] = "return confirm('您确定要删除吗?');";
        }
    }

    关于CommandArgument 不太明白你描述的意思,但除了 CommandArgument  可以传递主键信息外你还可以使用下面的方式在 RowCommand 事件中获取到主键

    Control cmdControl = e.CommandSource as Control; // 表示触发事件的 IButtonControl,保持统一性并便于后续操作,我们这里直接转化为控件基类 Control
    GridViewRow row = cmdControl.NamingContainer as GridViewRow;
    object primaryKey = this.GridView1.DataKeys[row.RowIndex].Value;


    知识改变命运,奋斗成就人生!
    • 已标记为答案 FrostX 2010年3月11日 7:04
    2010年3月11日 6:51
    版主
  • 这很简单如下:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Button deleteButton = e.Row.FindControl("btnDelete") as Button;
    
            if (deleteButton != null)
    	{
    	   if (需要确认提示)
    	        deleteButton.Attributes["onclick"] = "return confirm('您确定要删除吗?');";
    	}
        }
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 FrostX 2010年3月11日 7:05
    2010年3月11日 6:53
    版主

全部回复

  • 这不应该在RowCommand事件中,应该在数据绑定事件,好像叫RowBound啥的
    里面绑定事件

    添加这句试试:
    button.Attributes.Add("click", "return confirm('是否真的删除?');");

    2010年3月11日 6:41
  • 这不应该在RowCommand事件中,应该在数据绑定事件,好像叫RowBound啥的
    里面绑定事件

    添加这句试试:
    button.Attributes.Add("click", "return confirm('是否真的删除?');");

    关键是如果在RowBound里绑定事件的话,每次点击就都会弹出了,需求是不能每次点击都弹出,基本就是上面的代码,满足IF条件就不弹出了,不满足的时候弹出...
    2010年3月11日 6:47
  • 你好!

    添加确定删除框,应该在 RowDataBound 事件中处理。如下:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Button deleteButton = e.Row.FindControl("btnDelete") as Button;
    
            if (deleteButton != null)
                deleteButton.Attributes["onclick"] = "return confirm('您确定要删除吗?');";
        }
    }

    关于CommandArgument 不太明白你描述的意思,但除了 CommandArgument  可以传递主键信息外你还可以使用下面的方式在 RowCommand 事件中获取到主键

    Control cmdControl = e.CommandSource as Control; // 表示触发事件的 IButtonControl,保持统一性并便于后续操作,我们这里直接转化为控件基类 Control
    GridViewRow row = cmdControl.NamingContainer as GridViewRow;
    object primaryKey = this.GridView1.DataKeys[row.RowIndex].Value;


    知识改变命运,奋斗成就人生!
    • 已标记为答案 FrostX 2010年3月11日 7:04
    2010年3月11日 6:51
    版主
  • 这很简单如下:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Button deleteButton = e.Row.FindControl("btnDelete") as Button;
    
            if (deleteButton != null)
    	{
    	   if (需要确认提示)
    	        deleteButton.Attributes["onclick"] = "return confirm('您确定要删除吗?');";
    	}
        }
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 FrostX 2010年3月11日 7:05
    2010年3月11日 6:53
    版主
  • 感谢楼上两位...我忘记把条件也可以写在rowdatabound中了...
    2010年3月11日 7:04