代码如下
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string sqlStr = "delete from b where id=" + Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value) + "";
        Common.ExecuteSql(sqlStr);
        bind();
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            ((LinkButton)(GridView1.Rows[i].Cells[5].Controls[0])).Attributes.Add
            ("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");
        }
    } public static void ExecuteSql(string sqlStr)
    {
        try
        {
            openConnection();
            comm.CommandType = CommandType.Text;
            comm.CommandText = sqlStr;
            comm.ExecuteNonQuery();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            closeConnection();
        }
    }
按理说我按删除的时候应该弹出提醒框的,为什么第一次按删除的时候不弹出提醒框,第二次以后却弹出来

解决方案 »

  1.   

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string sqlStr = "delete from b where id=" + Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value) + "";
            Common.ExecuteSql(sqlStr);
            bind();
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                ((LinkButton)(GridView1.Rows[i].Cells[5].Controls[0])).Attributes.Add
                ("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");
            }
        }
    改成protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                ((LinkButton)(GridView1.Rows[i].Cells[5].Controls[0])).Attributes.Add
                ("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");
            }
            string sqlStr = "delete from b where id=" + Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value) + "";
            Common.ExecuteSql(sqlStr);
            bind();
            
        }
      

  2.   

    OnClientClick="return confirm('您确定要删除吗?');"
      

  3.   

    这样来注册把以下代码贴到GRID控件中
    <asp:TemplateField HeaderText="删除新闻" ShowHeader="False">
    <ItemTemplate>
    <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("NewsID") %>' CommandName="DelCmd" OnClientClick="return confirm('您确定要删除吗?');">删除</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateField>
      

  4.   

    你用循环来找删除按钮,肯定会全部删除的。应该前台绑定LinkButton的CommandArgument和CommandName属性
    <asp:TemplateField HeaderText="删除新闻" ShowHeader="False">
    <ItemTemplate>
    <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("NewsID") %>' CommandName="DelCmd" OnClientClick="return confirm('您确定要删除吗?');">删除</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateField>然后写RowCommand事件,不要用RowDeleting
    protected void GridView1_RowCommand(object sender, GridViewDeleteEventArgs e)
      {
    if(e.CommandName=="DelCmd")
    {
        string sqlStr = "delete from b where id=" + Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value) + "";
      Common.ExecuteSql(sqlStr);
    }
      bind();
        
      }
      

  5.   

    大哥,您题目理解错误了,您再看一遍,您下面说的这一种,我刚试过,挺好使,每次触法OnClientClick事件
      

  6.   

    这个不好使,我就是看着这个做的,只不过那上面用的是按钮,我修改了一下,我用GridView的删除按钮,效果却不一样
      

  7.   

    GridView1.Rows.Count
    怎么了??
      

  8.   

    唉..你是控件方法注册错了..for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                ((LinkButton)(GridView1.Rows[i].Cells[5].Controls[0])).Attributes.Add
                ("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");
            }这段代码应该放在pageload里...
      

  9.   


    <%#"<a href=\"?DeleteId=" + Eval("Id") + "\" onclick=\"javascript:return confirm('您确实要永久删除吗?此操作不可恢复。')\">删除</a>"%>
    前台试试这样写
    后台
    protected void Page_Load(object sender, EventArgs e)
        {if (!Page.IsPostBack)
            {   
                if (Request["DeleteId"] != null && int.TryParse(Request["DeleteId"], out id))
                {
                    Delete(id);                }
                }
    删除功能写成一个方法调用
      

  10.   

    大哥,不好意思,这个方法又不行,无论是放在if(!IspostBack)括号里面还是外面,每次都是第一次提醒,然后后面再进行删除操作,就不会提醒了
      

  11.   

    循环不行,因为GRIDVIEW第一行的索引值就是0所以第一个不会弹出来
      

  12.   

    ??不会啊,
    <%#"<a href=\"?DeleteId=" + Eval("Id") + "\" onclick=\"javascript:return confirm('您确实要永久删除吗?此操作不可恢复。')\">删除</a>"%>
    这个是写在前台页面上的,页面显示数据时,每一条数据的最后一列都有一个“删除”链接,当点击时,会提醒用户删除的当前这一条数据删除后不可恢复,而这个删除链接绑定的是当前数据的ID,只要页面显示了多少条数据就有属于每条数据ID,点击删除时就会显示提示当前数据删除不会恢复
      

  13.   

    好吧...你用IE8以上的开发人员工具或者FF的firebug看下前台页面..格式化后的HTML代码   看看你的JS事件注册了没有
      

  14.   

     <asp:LinkButton ID="lbtDel" runat="server" Text="删除" CommandName="Delete" OnClientClick="return confirm('你确定要删除此记录吗?')"></asp:LinkButton>
    protected void GridView1_RowCommand(object sender, GridViewDeleteEventArgs e)
     {
    if(e.CommandName=="Delete")
    {
     }
        
     }
      

  15.   

    编辑和删除 前台:
    <asp:GridView ID="GridView1" runat="server" DataKeyNames="ID"
                    OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_CancelingEdit"
                    OnRowDeleting="GridView1_RowDeleting" PageSize="15" AllowPaging="true" OnPageIndexChanging="GridView1_PageIndexChanging"
                    ShowHeader="true">
                    <Columns>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:Label runat="server" Text="ID"></asp:Label>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:Label runat="server" Text=‘<%#Bind("ID") %>‘ ID="Label0"></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:Label runat="server" Text="姓名"></asp:Label></HeaderTemplate>
                            <ItemTemplate>
                                <asp:Label runat="server" Text=‘<%#Bind("UserName") %>‘ ID="Label2"></asp:Label>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:TextBox Text=‘<%#Bind("UserName") %>‘ runat="server" ID="UserName"></asp:TextBox><asp:RequiredFieldValidator
                                    runat="server" ErrorMessage="不能为空" ControlToValidate="UserName" Display="Dynamic">*</asp:RequiredFieldValidator>
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:Label runat="server" Text="金额"></asp:Label>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:Label runat="server" Text=‘<%#Bind("Money") %>‘ ID="Label33"></asp:Label>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:TextBox Text=‘<%#Bind("Money")%>‘ runat="server" ID="Money"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="不能为空"
                                    ControlToValidate="Money" Display="Dynamic">*</asp:RequiredFieldValidator>
                                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="整数或浮点数"
                                    ValidationExpression="^\d*$|[1-9]\d*\.\d*|0\.\d*[1-9]\d*$" ControlToValidate="Money"
                                    Display="Dynamic">*</asp:RegularExpressionValidator>
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" HeaderText="操作" />
                    </Columns>
                    <HeaderStyle BackColor="blue" ForeColor="white" />
                </asp:GridView>
    后台:
    string myConnectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString;
        SqlConnection myConnection = new SqlConnection();
        protected void Page_Load(object sender, EventArgs e)
        {
            myConnection.ConnectionString = myConnectionString;
            if (!IsPostBack)
            {
                T();
            }
        }
        public void T()
        {
            myConnection.Open();
            string sql = "Select * From Test";
            SqlDataAdapter da = new SqlDataAdapter(sql, myConnection);
            DataSet ds = new DataSet();
            da.Fill(ds, "Test");
            GridView1.DataSource = ds;
            GridView1.DataKeyNames = new string[] { "ID" };
            GridView1.DataBind();
            myConnection.Close();
        }
        public void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            myConnection.Open();
            GridViewRow row = GridView1.Rows[e.RowIndex];
            int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString());
            string userName = ((TextBox)row.FindControl("UserName")).Text.ToString();
            double Money = Convert.ToDouble(((TextBox)row.FindControl("Money")).Text.ToString());
            SqlDataReader dr;
            string sql = "Update Test Set UserName=‘" + userName + "‘,Money=" + Money + " Where ID=" + ID + "";
            SqlCommand myCommand = new SqlCommand(sql, myConnection);
            dr = myCommand.ExecuteReader();
            GridView1.EditIndex = -1;
            myConnection.Close();
            T();
        }
        public void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            myConnection.Open();
            GridViewRow row = GridView1.Rows[e.RowIndex];
            int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString());
            SqlDataReader dr;
            string sql = "Delete From Test Where ID=" + ID + "";
            SqlCommand myCommand = new SqlCommand(sql, myConnection);
            dr = myCommand.ExecuteReader();
            GridView1.EditIndex = -1;
            myConnection.Close();
            T();
        }
        public void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            T();
        }
        public void GridView1_CancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            T();
        }
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            T();
        }
      

  16.   

    你把for循环放在删除操作之前,应该就可以了
      

  17.   

    俺也来小装一把。((LinkButton)(GridView1.Rows[i].Cells[5].Controls[0])).Attributes.Add
                ("onclick", "return confirm('你确认删除吗?');");
      

  18.   

    刚没看清楚题,楼上的一段代码
    放在RowDataBound事件里
    不可能放在删除事件里
      

  19.   

    把你pageload的代码贴出来   
    今天我刚处理完一个gridview应该错不了的..
      

  20.   

    OnClientClick="return confirm('您确定要删除吗?');"
      

  21.   

    你应该在数据绑定的时候进行添加
    ((LinkButton)(GridView1.Rows[i].Cells[5].Controls[0])).Attributes.Add
                ("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");啊参见
    http://dotnet.aspx.cc/file/GridView-LinkButton-Confirm-Div.aspx
      

  22.   

    我的pageload里的代码if(!IspostBack)
    {
       bind();
    }大哥你好好想想,我觉得问题出在删除语句,与for循环之间
      

  23.   

    if(!IspostBack)
    {
       bind();
    }
    for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                ((LinkButton)(GridView1.Rows[i].Cells[5].Controls[0])).Attributes.Add
                ("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");
            }
      

  24.   

    看了全部回复,好像漏了RowDataBound事件试试protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string sqlStr = "delete from b where id=" + Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value) + "";
            Common.ExecuteSql(sqlStr);
            bind();
        }protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                 ((LinkButton)(GridView1.Rows[i].Cells[5].Controls[0])).Attributes.Add
                ("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");        }
        }
      

  25.   

    OnClientClick="return confirm('您确定要删除吗?');"
    这玩意满足不了你?????我怎么就不信呢。
      

  26.   


    我看了好几遍才明白你问的是个啥,这么多人没一下子明白你的意图,看来是你问的太深奥了!你的代码里边第一次删除之后才执行客户机代码的事件注册,所以第一次删除不会有反应!夜哥告诉你第一次改的代码也是一样的,你每次DATABIND()之后,注册是事件就没有了,因为前台的LINKBUTTON都是重新生成的,你删除之后就DATABIND却不重新注册,如果你不用夜哥告诉你的第二种写法,那你就应该把DATABIND独立出来,把要处理的内容都放到DATABIND的方法里一起处理!你每次DATABIND()之后就应该注册,你放到POSTBACK里什么的肯定是后来又DATABIND()了,所以事件才没有响应的,人家告诉你放到PAGE_LOAD里,你不好举一反三一下么大哥!
      

  27.   

    给你一个简单、容易理解的完整的代码
    <%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
      protected void x_Click(object sender, EventArgs e)
      {
        LinkButton x = sender as LinkButton;
        String sql = "delete from table where id=" + x.CommandArgument;
        Response.Write(sql);
        //删除完毕执行下面的代码。
        //Response.Redirect(Request.Url.ToString());
      }  protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection();
          cn.ConnectionString = "Data Source=(local);Initial Catalog=UserMGR;Integrated Security=True";
          cn.Open();
          System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
          cmd.CommandText = "SELECT * FROM [BaseObject]";
          cmd.Connection = cn;
          GridView1.DataSource = cmd.ExecuteReader();
          GridView1.DataBind();
          cn.Dispose();
        }
      }  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
      {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
          LinkButton x = e.Row.FindControl("x") as LinkButton;
          x.OnClientClick = "return window.confirm('你真的要删除吗?');";
        }
      }
    </script>
    <body>
      <form id="form1" runat="server">
      <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
        <Columns>
          <asp:TemplateField>
            <ItemTemplate>
              <asp:LinkButton ID="x" runat="server" Text="删除" OnClick="x_Click" CommandArgument='<%#Eval("objectId") %>'></asp:LinkButton>
            </ItemTemplate>
          </asp:TemplateField>
        </Columns>
      </asp:GridView>
      </form>
    </body>
    </html> 
      

  28.   


    <asp:TemplateField>
                    <HeaderTemplate>
                        删除</HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox runat="server" ID="txtCNo" onclick="javascript:chkRow(this);" />
                    </ItemTemplate>
                </asp:TemplateField>这是我项目中的一个删除列
    /// 删除事件
    function chkRow(obj){var r = obj.parentElement.parentElement.parentElement;
    if(obj.checked){ r.style.backgroundColor="#FFD7EA"; 
    if(confirm("你确信要删除 行颜色突出显示 的信息?"))
    {
    document.forms[0].submit();
    }
    else
    {
    obj.checked=false;
    r.style.backgroundColor="";
    }
    }
    else {if(r.rowIndex%2==1)r.style.backgroundColor="";else r.style.backgroundColor="#F5F5F5";}}
    这是JS代码...   具体的你慢慢琢磨去吧...我也不知道该怎么说了...
      

  29.   

    首先,谢谢老大您。也许是我描述的不够清楚,确实有不少人曲解了题意。您说的很好,就是这个毛病,我吧,就是有点晕,可能是逻辑有问题,我首先已经在Sql语句里面搜索出行号,而下面的for循环又一次搜索行号,这样不知道有没有歧义。您所说的这么多例子,让我举一反三,小弟也不是没想过,就是能力有限,想不出那么多,我想举一反三应该是再一定的基础上,把所用到的只是融会贯通,然后通过实例多加练习吧