protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string cartid;
        string cartadd="";
        if (GridView1.DataKeys.Count == 0)
            cartid = "";
        else if (GridView1.DataKeys.Count > e.RowIndex)
            cartid = Convert.ToString(GridView1.DataKeys[e.RowIndex].Values[0]);
        Label1.Text = cartid;
        string[] idcategory=Request.Cookies["qyidcookie1"].Value.Split('|');
        foreach (string i in idcategory)
        {
            if (i == cartid)
            {
                continue;
            }
            else
            {
                cartadd += i + "|";
            }
        }
        HttpCookie qyidcookie = new HttpCookie("qyidcookie1");
        qyidcookie.Value =cartadd;
        DateTime time = DateTime.Now;
        TimeSpan tspan = new TimeSpan(0, 0, 0, 45000);
        qyidcookie.Expires = time.Add(tspan);
        Response.Cookies.Add(qyidcookie);
     }
刚才一兴奋就结贴了。目前依然有问题,删除其余记录都没问题,就是不能删除第一个,如果删除第一条记录刷新页面还是会一条条不断的删除记录

解决方案 »

  1.   

    在Row_Command 事件里面写!
      

  2.   

    http://topic.csdn.net/u/20100604/10/a34a9f40-899d-4aa5-abed-756c6fc0251d.html
    我天天都能见到口口啊呵呵
    这个是上午发的帖子
      

  3.   

    不太清楚你在GridView中删除一条记录为什么还要加个<div...>之类的!
    GridView中删除一条记录大致有两种方式,
    1.系统自动提供的非模板列
    2.自己添加模板列,如以下就是自己添加的模板列!
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" 
                    onclientclick="return confirm('确要删除吗?')">删除</asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    就可以了!
      

  4.   

    那种方法我是在网上看到的,用起来觉得还不错,就是有个确定后刷新页面还是选择确定的问题……
    <asp:CommandField ShowDeleteButton="True" HeaderText="删除" 
                                DeleteText="&lt;div id=&quot;de&quot; onclick=&quot;JavaScript:return confirm('确定删除吗?')&quot;&gt;删除&lt;/div&gt;" >
                                <HeaderStyle BorderStyle="None" />
                                <ItemStyle Height="35px" HorizontalAlign="Center" Width="60px" BorderStyle="None" />
              </asp:CommandField>
    我用的这样的方法,判断后就有那个问题了……
      

  5.   

    一般直接
    <asp:LinkButton ID="LinkButton2" runat="server" CommandName="delete" CausesValidation="False"  OnClientClick="return confirm('确认要删除吗?');">删除</asp:LinkButton>
      protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
               int id=Convert.ToInt32(gv.DataKeys[e.RowIndex].Value.);
               
                BindData();
            }
    或转动页面
      

  6.   

     /// <summary>
            /// 弹出确认框是否删除
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void GdView_Bind_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)
                    {
                        ((LinkButton)e.Row.Cells[3].Controls[0]).Attributes.Add("onclick", "javascript:return confirm('你确认要删除:\"" + e.Row.Cells[1].Text + "\"吗?')");
                    }
                }  
            }
      

  7.   

    对 在这个事件里写 判断commandName的值
    来操作 相应的删除方法
      

  8.   

    删除记录是根据id的!删掉某个id后,再刷新页面仍旧是这个id,但这个id删掉了,所以正常情况下不会删其它的id的!
    一般的代码是:
        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string id = GridView1.DataKeys[e.RowIndex].Value.ToString();//刷新页面这个id是不会变的
            //删除操作
             //绑定数据
        }
      

  9.   


    我试了试还是不能删除    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string cartid="";
            string cartadd="";
            if (GridView1.DataKeys.Count == 0)
                cartid = "";
            else if (GridView1.DataKeys.Count > e.RowIndex)
                cartid = GridView1.DataKeys[e.RowIndex].Value.ToString();
             // cartid = Convert.ToString(GridView1.DataKeys[e.RowIndex].Values[0]);
            Label1.Text = cartid;
            string[] idcategory=Request.Cookies["qyidcookie1"].Value.Split('|');
            foreach (string i in idcategory)
            {
                if (i == cartid)
                {
                    continue;
                }
                else
                {
                    cartadd += i + "|";
                }
            }
            HttpCookie qyidcookie = new HttpCookie("qyidcookie1");
            qyidcookie.Value =cartadd;
            DateTime time = DateTime.Now;
            TimeSpan tspan = new TimeSpan(0, 0, 0, 45000);
            qyidcookie.Expires = time.Add(tspan);
            Response.Cookies.Add(qyidcookie);
    } - - 
      

  10.   

    代码别太多,一个一个来,点击了删除,一定会得到一个该记录的id,(当然你设置了DataKeyNames)
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string id = GridView1.DataKeys[e.RowIndex].Value.ToString();
        //这里调试,看获得了id不??
    }
      

  11.   

    因为我设了一个Label1.Text = cartid;偷懒招呵呵
    所以每次刷新都能看到ID变啊变的,直到变成了Label,挺郁闷的
      

  12.   

    关于刷新删除,你可以在页面放一个 <input type='hidden'然后确认删除后 将hidden 赋值, 删除前判断 hidden 的值即可
      

  13.   

    获得了id那就该干嘛干嘛了!
    以这种方式获得的id刷新应该是不会变的!!
    string id = GridView1.DataKeys[e.RowIndex].Value.ToString();
      

  14.   


    是啊,所以我进行了下一步,但是只要加上        string[] idcategory = Request.Cookies["qyidcookie1"].Value.Split('|');
            foreach (string i in idcategory)
            {
                if (i == cartid)
                {
                    continue;
                }
                else
                {
                    cartadd += i + "|";
                }
            }
            HttpCookie qyidcookie = new HttpCookie("qyidcookie1");
            qyidcookie.Value = cartadd;
            DateTime time = DateTime.Now;
            TimeSpan tspan = new TimeSpan(0, 0, 0, 45000);
            qyidcookie.Expires = time.Add(tspan);
            Response.Cookies.Add(qyidcookie);删除这段问题就随之而来了,除了删除第一项外其余的都正常。删除其他项不管怎么刷新都没问题,可是就是删除第一项后,就开始逐个的还是按照顺序的一个一个的删除了,刷新一下,删除一条……。“居然成了半自动化了- -”
      

  15.   

    我有一个小小的想法,是不是GridView1.DataKeys.Count == 0判断默认判断的是第一个ID呢?因为是在本页刷新所以刷新后找不到ID了?但是又想回来,如果要是没有ID了就应该=0了是不是,也就是执行了cartid="";了吧?
    if (GridView1.DataKeys.Count == 0)
                cartid = "";
    else if (GridView1.DataKeys.Count > e.RowIndex)
                cartid = GridView1.DataKeys[e.RowIndex].Value.ToString();
      

  16.   


     string[] idcategory=Request.Cookies["qyidcookie1"].Value.Split('|');
            foreach (string i in idcategory)
            {
                if (i == cartid)
                {
                    continue;
                }
                else
                {
                    cartadd += i + "|";
                }
            }
            HttpCookie qyidcookie = new HttpCookie("qyidcookie1");
            qyidcookie.Value =cartadd;你这段代码想实现什么功能
      

  17.   

    我当初的设想是通过cookie来控制一个购物车,把ID放在cookie,在用cookie作为约束来显示用户所选的商品,我是把用户所选的ID提取出来,除了用户所选,剩下的全部从新放入cookie这样看起来就像是删除了一条记录一样。因为我是个菜鸟没什么概念,所以只想到了这种笨方法……
      

  18.   

    你想用cookie 来实现购物车, cookie 中存在的 在页面不显示 是么
      

  19.   

    显示页我都已经做完了,现在就是把用户的cookie里的内容做一下遍历,筛选出来用户所选的ID,剩下其余的在从新放进cookie
      

  20.   

    现在就是把用户的cookie里的内容做一下遍历,筛选出来用户所选的ID,剩下其余的在从新放进cookie
    --------------------------------------------------------------------------------问题可能就在这里。
      

  21.   

    string[] idcategory=Request.Cookies["qyidcookie1"].Value.Split('|');
            foreach (string i in idcategory)
            {
                if (i == cartid)
                {
                    continue;
                }
                else
                {
                    cartadd += i + "|";
                }
            }
            HttpCookie qyidcookie = new HttpCookie("qyidcookie1");
            qyidcookie.Value =cartadd;这个就是遍历筛选的代码,我又看来两遍,没看出来错误在什么地方……
      

  22.   


    string[] idcategory=Request.Cookies["qyidcookie1"].Value.Split('|');
            foreach (string i in idcategory)
            {
                if (i == cartid)
                {
                    continue;
                }
                else
                {
                    cartadd += i + "|";
                }
            }...qyidcookie.Value = cartadd;...=>
    string idcategory="|"+(Request.Cookies["qyidcookie1"].Value??"")+"|";idcategory=idcategory.Replace("|"+cartid+"|","|");
            qyidcookie.Value = idcategory;
      

  23.   

            string cartid="";
            string cartadd="";
            if (GridView1.DataKeys.Count == 0)
                cartid = "";
            else if (GridView1.DataKeys.Count > e.RowIndex)
                cartid = GridView1.DataKeys[e.RowIndex].Value.ToString();
            Label1.Text = cartid;
            HttpCookie qyidcookie = new HttpCookie("qyidcookie1");
            string idcategory = "|" + (Request.Cookies["qyidcookie1"].Value ?? "") + "|";
            idcategory = idcategory.Replace("|" + cartid + "|", "|");
            qyidcookie.Value = idcategory;
            DateTime time = DateTime.Now;
            TimeSpan tspan = new TimeSpan(0, 0, 0, 45000);
            qyidcookie.Expires = time.Add(tspan);
            Response.Cookies.Add(qyidcookie);这样会从当前ID开始一直删除到最后一条,但是当前所选ID之前的记录还都保留。
      

  24.   

    这样会从当前ID开始一直删除到最后一条,但是当前所选ID之前的记录还都保留。是说点删除后 刷新后的效果么?你+个断点 看下 cartid  刷新前后的变化
      

  25.   

    if (GridView1.DataKeys.Count == 0)
                cartid = "";
            else if (GridView1.DataKeys.Count > e.RowIndex)
                cartid = GridView1.DataKeys[e.RowIndex].Value.ToString();
    --------------------------------------------------------------------------
    刷新删除的原因 和你这段获取当前行的主键 有关系e.RowIndex 可能没变,但你删除后 GridView 的行数会减少 而相对的你之前选择的行已删除 所以获取的 DataKeys[e.RowIndex] 会是删除行的下一行
      

  26.   

    你的GridView 绑定那些DataKeys 所设置的绑定了么
      

  27.   


    没有绑定啊,请问要如何绑定DataKeys呢?那要如何阻止DataKeys[e.RowIndex]删除下一行呢?
      

  28.   

    你把你GridView 的 html 代码部分贴一下
      

  29.   

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                        Width="740px" onrowdeleting="GridView1_RowDeleting">
                        <RowStyle BackColor="#FEFCE9" />
                        <Columns>
                            <asp:BoundField DataField="book_id" HeaderText="id" Visible="False" />
                            <asp:BoundField HeaderText=" ">
                                <HeaderStyle Width="15px" BorderStyle="None" />
                                <ItemStyle Width="20px" BorderStyle="None" />
                            </asp:BoundField>
                            <asp:BoundField DataField="min_type" HeaderText="类别" >
                                <HeaderStyle BorderStyle="None" HorizontalAlign="Left" />
                                <ItemStyle Height="35px" HorizontalAlign="Left" Width="100px" 
                                    BorderStyle="None" />
                            </asp:BoundField>
                            <asp:HyperLinkField DataNavigateUrlFields="book_id" 
                                DataNavigateUrlFormatString="~/book_look.aspx?id={0}" DataTextField="book_name" 
                                HeaderText="书名">
                                <HeaderStyle BorderStyle="None" HorizontalAlign="Left" />
                                <ItemStyle BorderStyle="None" Height="35px" HorizontalAlign="Left" 
                                    Width="380px" />
                            </asp:HyperLinkField>
                            <asp:BoundField DataField="writer_info" HeaderText="作者" >
                                <HeaderStyle BorderStyle="None" HorizontalAlign="Left" />
                                <ItemStyle Height="35px" HorizontalAlign="Left" Width="130px" 
                                    BorderStyle="None" />
                            </asp:BoundField>
                            <asp:BoundField DataField="book_price" HeaderText="单价" >
                                <HeaderStyle BorderStyle="None" />
                                <ItemStyle Height="35px" HorizontalAlign="Right" Width="50px" 
                                    BorderStyle="None" />
                            </asp:BoundField>
                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" 
                                        onclientclick="return confirm('确要删除吗?')">删除</asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                        <HeaderStyle BackColor="#EAB96F" Font-Size="10pt" ForeColor="#333333" 
                            Height="24px" />
                        <AlternatingRowStyle BackColor="#E8F0E1" />
    </asp:GridView>
    CS显示部分
        SqlConnection conn = new SqlConnection("server=(local);database=qy;uid=sa;pwd=");
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = Request.Cookies["qyidcookie1"].Value;
            DataTable tableSource = null;
            if (Request.Cookies["qyidcookie1"] != null)
            {
                string[] idcategory = Request.Cookies["qyidcookie1"].Value.Split('|');
                foreach (string i in idcategory)
                {
                    string display = "select book_id,book_name,writer_info,min_type,book_price from book_info where book_id = " + "'" + i + "'";
                    SqlDataAdapter sda = new SqlDataAdapter(display, conn);
                    DataSet ds = new DataSet();
                    sda.Fill(ds);
                    if (tableSource == null)
                    {
                        tableSource = ds.Tables[0];
                    }
                    else
                    {
                        tableSource.Merge(ds.Tables[0]);
                    }
                }
                GridView1.DataSource = tableSource;
                GridView1.DataKeyNames = new string[] { "book_id" };
                GridView1.DataBind();
            }
            else
            {
                Response.Write("<script>alert('你的购物车中没有商品,请选购后在查看!'); target='_blank'; </script>");
            }
        }
      

  30.   

    在.aspx 页上 + 如下:<input type='hidden' id='hid' name='hName' />
    <script>
    function customConfirm(val)
    {
        if(confirm('确要删除吗?'))
        {
             document.getElementById('hid').value=val;
             return true;
        }
        else
        {
             return false;
        }
    }
    </script>
    -----------------------------------------------------------
    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" 
                                        onclientclick="return confirm('确要删除吗?')">删除</asp:LinkButton>=>
    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" 
                                        onclientclick=return customConfirm('<%#Eval("book_id")%>') >删除</asp:LinkButton>
      

  31.   


    string cartid="";
            string cartadd="";
            if (GridView1.DataKeys.Count == 0)
                cartid = "";
            else if (GridView1.DataKeys.Count > e.RowIndex)
                cartid = GridView1.DataKeys[e.RowIndex].Value.ToString();
            Label1.Text = cartid;
    =>
    string cartid=Request.Form["hName"]??"";
            Label1.Text = cartid;
      

  32.   


    如何这样就判断不了cookie了吧?
      

  33.   

    请问<input type='hidden' id='hid' name='hName' />是加在什么地方呢?任意吗?
      

  34.   

    放在 .aspx 页的 html 里即可
      

  35.   

    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" 
                                        onclientclick=return customConfirm('<%#Eval("book_id")%>') >删除</asp:LinkButton>
    这样写会报错,这样写可以吧
    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" 
                                        onclientclick=return customConfirm=<%#Eval("book_id")%> >删除</asp:LinkButton>我都加进去了,不过现在失去了确认功能,并且不删除了。
      

  36.   

    服务器标记的格式不正确。
    行 119:                        <asp:TemplateField>
    行 120:                        <ItemTemplate>
    行 121:         <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" 
    行 122:                        onclientclick=return customConfirm('<%#Eval("book_id")%>') >删除</asp:LinkButton>
      

  37.   

    customConfirm('<%#Eval("book_id")%>')少个等号吧?
    customConfirm=('<%#Eval("book_id")%>')但是这样也不好用,没有选择提示也不删除
      

  38.   

     onclientclick=return customConfirm('<%#Eval("book_id")%>')=》
    OnClientClick=<%# string.Format("return customConfirm('{0}');",Eval("book_id"))%>
      

  39.   

    这个不报错了,但是感觉
    <script>
    function customConfirm(val)
    {
        if(confirm('确要删除吗?'))
        {
             document.getElementById('hid').value=val;
             return true;
        }
        else
        {
             return false;
        }
    }
    </script>
    始终没有执行,一直没有确认对话框
      

  40.   

    是因为我在贴OnClientClick=<%# string.Format("return customConfirm('{0}');",Eval("book_id"))%>的时候前面有个o没覆盖掉,一时没看出来- -,现在已经可以删除了并且不管删除哪个都不会出问题了,真不好意思还要麻烦你一下就是删除后会保留一个|现在已经N个|了        string[] idcategory = Request.Cookies["qyidcookie1"].Value.Split('|');
            foreach (string i in idcategory)
            {
                if (i == cartid)
                {
                    continue;
                }
                else
                {
                    cartadd += i+"|";
                }
            }
            HttpCookie qyidcookie = new HttpCookie("qyidcookie1");
            qyidcookie.Value = cartadd;
            DateTime time = DateTime.Now;
            TimeSpan tspan = new TimeSpan(0, 0, 0, 45000);
            qyidcookie.Expires = time.Add(tspan);
            Response.Cookies.Add(qyidcookie);这个我也改了很久了,不过都会保留一个|并且cookie的保留时间不是45000分钟
    在加40分,希望你能在帮我看看呵呵
      

  41.   

    string idcategory="|"+(Request.Cookies["qyidcookie1"].Value??"")+"|";idcategory=idcategory.Replace("|"+cartid+"|","|");qyidcookie.Value = idcategory;这个以前我试过,删除后会留下2个|
      

  42.   

    string idcategory="|"+(Request.Cookies["qyidcookie1"].Value??"").TrimStart('|').TrimEnd('|')+"|";idcategory=idcategory.Replace("|"+cartid+"|","|");qyidcookie.Value = idcategory.TrimStart('|').TrimEnd('|');这样试下
      

  43.   


    这样当删除到剩余一条事右侧的|也被删除了只剩下ID,当在添加后就会把这个数字与新添加的ID写在一起了
    比如剩余22
    新添加  34|
    等于    2234|
      

  44.   

        protected void Page_Load(object sender, EventArgs e)
        {
            bookid = Request.QueryString["ID"];
        }
        protected void shoppingcart_click(object sender, EventArgs e)
        {
            HttpCookie qyidcookie = new HttpCookie("qyidcookie1");
            if (Request.Cookies["qyidcookie1"] == null)
            {
                qyidcookie.Value = bookid + "|";
                DateTime time = DateTime.Now;
                TimeSpan tspan = new TimeSpan(0, 0, 0, 45000);
                qyidcookie.Expires = time.Add(tspan);
                Response.Cookies.Add(qyidcookie);
            }
            else
            {
                qyidcookie.Value = Request.Cookies["qyidcookie1"].Value + bookid + "|";
                DateTime time = DateTime.Now;
                TimeSpan tspan = new TimeSpan(0, 0, 0, 45000);
                qyidcookie.Expires = time.Add(tspan);
                Response.Cookies.Add(qyidcookie);
            }
            Response.Write("<script>alert('添加成功!')</script>");
            
        }
      

  45.   

    哦,那这样写
    string idcategory="|"+(Request.Cookies["qyidcookie1"].Value??"").TrimStart('|');idcategory=idcategory.Replace("|"+cartid+"|","|");qyidcookie.Value = idcategory.TrimStart('|');
      

  46.   


    这个嗷嗷好用,谢谢!请问我的cookie设置时间写错了吗?为什么设置不了呢?
      

  47.   

    DateTime time = DateTime.Now;
            TimeSpan tspan = new TimeSpan(0, 0, 0, 45000);
            qyidcookie.Expires = time.Add(tspan);
    =>
    qyidcookie.Expires = DateTime.Now.AddMinutes(45);//45分钟