none
求助:GridView 删除数据库的某一条数据删除不了 RRS feed

  • 问题

  • 1.UI

     protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            this.GridView1.PageIndex = e.RowIndex;
            int i = (int)this.GridView1.PageIndex;  
            BLL.userBLL UB = new userBLL();
            if (UB.deleteUserTBLL(i) > 0)
            {
                Response.Write("删除成功");
            }
            else {
                Response.Write("删除失败");
            }
        }

     

     

    2.DAL

       public int deleteUserTDAL(string sql)
            {
                con.Open();
                SqlCommand cm = new SqlCommand(sql,con);
               
                return (int)cm.ExecuteNonQuery();
            }

     

    3.BLL

           public int deleteUserTBLL(int ID)

            {
                string sql = "delete from user_tb  where userID='" +ID + "'  ";

                return (int)uDAL.deleteUserDAL(sql);

            }

    删除不了信息,提示:删除失败

    错来哪里呢
    you are welcome
    2011年2月22日 15:08

答案

  • protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
      //this.GridView1.PageIndex = e.RowIndex;
      //int i = (int)this.GridView1.PageIndex; // i 只是 PageIndex 并不是数据表中的主键值
      //BLL.userBLL UB = new userBLL();
      //if (UB.deleteUserTBLL(i) > 0)
      //{
      //  Response.Write("删除成功");
      //}
      //else
      //{
      //  Response.Write("删除失败");
      //}
    
      // 获取删除行的主键值,前提是需要声明 GridView 的 DataKeyNames 示例如下
      // http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.datakeynames(v=vs.80).aspx
          
      int primaryKeyValue = (int)GridView2.DataKeys[e.RowIndex].Value; 
    
      if (UB.deleteUserTBLL(primaryKeyValue) > 0)
      {
        Response.Write("删除成功");
      }
      else
      {
        Response.Write("删除失败");
      }
    }
    

    知识改变命运,奋斗成就人生!
    2011年2月23日 1:01
    版主
  • 你的代码中使用了GridView2.DataKeys DataKeys,那么就必须在<asp:GridView 定义时设置 DataKeyNames
    【孟子E章】
    2011年2月26日 1:35
    版主
  • 是只需要传递一个id,可是您的代码传递的是页面的索引值,而应该传递行记录索引。

    上面几位已提示的很清晰了:

    为了使用:

    int
     primaryKeyValue = (int
    )GridView2.DataKeys[e.RowIndex].Value; 

    就需要在aspx上的GridView2设置datakeynames。例如:

    <asp:gridview id="GridView2"
            datakeynames="userID
            ......
            runat="server">
          </asp:gridview>

    回答了这么多您的问题,我想不自量力地给您一个建议:建议您找一本asp.net或c#的书,按书中的例子等一步步做,先练好基本功。例如:《asp.net3.5揭秘》等。要么就按msdn的例子演练。以现在您的基础一下就想研究体系结构。那么有很多时候您的思想是对的,可就因为一些小小的技术问题,却难以走下去,最终会导致信心全无,甚至推翻之前正确的思想。

    2011年2月27日 7:31
    版主

全部回复

  • protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
      //this.GridView1.PageIndex = e.RowIndex;
      //int i = (int)this.GridView1.PageIndex; // i 只是 PageIndex 并不是数据表中的主键值
      //BLL.userBLL UB = new userBLL();
      //if (UB.deleteUserTBLL(i) > 0)
      //{
      //  Response.Write("删除成功");
      //}
      //else
      //{
      //  Response.Write("删除失败");
      //}
    
      // 获取删除行的主键值,前提是需要声明 GridView 的 DataKeyNames 示例如下
      // http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.datakeynames(v=vs.80).aspx
          
      int primaryKeyValue = (int)GridView2.DataKeys[e.RowIndex].Value; 
    
      if (UB.deleteUserTBLL(primaryKeyValue) > 0)
      {
        Response.Write("删除成功");
      }
      else
      {
        Response.Write("删除失败");
      }
    }
    

    知识改变命运,奋斗成就人生!
    2011年2月23日 1:01
    版主
  • 您好,我刚刚调试果了,我看到你说的意思啊。但是我像你那样子修改程序。

    出现的错误:索引超出范围。必须为非负值并小于集合大小。
    参数名: index


    you are welcome
    2011年2月23日 12:35
  • 是不是以为我的数据字段设计有问题呢?

    数据字段userID 是int型并且是字段增长的;

    userID int indentity(1,1)


    you are welcome
    2011年2月23日 13:21
  • 你确认你声明了 DataKeyNames 属性了吗?
    知识改变命运,奋斗成就人生!
    2011年2月23日 14:36
    版主
  • 这个在控件上我没设置。要怎么设置呢

    DataKeyNames ?????? 多谢了

     


    you are welcome
    2011年2月24日 4:12
  • 你好!

    参考下面地址,另外建议有问题时先查查 MSDN 。

    http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.datakeynames(v=vs.80).aspx


    知识改变命运,奋斗成就人生!
    2011年2月24日 4:46
    版主
  • 小弟技术水平有限。看的不是很懂。

    是不是设置DataKeyNames 的属性,然后要传值到业务逻辑层的时候,是不是要传DataKeyNames 的值过去呢


    you are welcome
    2011年2月25日 15:52
  • 你的代码中使用了GridView2.DataKeys DataKeys,那么就必须在<asp:GridView 定义时设置 DataKeyNames
    【孟子E章】
    2011年2月26日 1:35
    版主
  • 1.UI

     protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            this.GridView1.PageIndex = e.RowIndex;
            int i = (int)this.GridView1.PageIndex;  
            BLL.userBLL UB = new userBLL();
            if (UB.deleteUserTBLL(i) > 0)
            {
                Response.Write("删除成功");
            }
            else {
                Response.Write("删除失败");
            }
        }

     

    在这里我只需要怎么设置才好呢?是不是需要设置一个datakeyname,需要怎么设置呢?

    我还是不怎么明白。不是要删除就直接传一个id过去就可以删除了嘛/


    you are welcome
    2011年2月26日 14:32
  • 是只需要传递一个id,可是您的代码传递的是页面的索引值,而应该传递行记录索引。

    上面几位已提示的很清晰了:

    为了使用:

    int
     primaryKeyValue = (int
    )GridView2.DataKeys[e.RowIndex].Value; 

    就需要在aspx上的GridView2设置datakeynames。例如:

    <asp:gridview id="GridView2"
            datakeynames="userID
            ......
            runat="server">
          </asp:gridview>

    回答了这么多您的问题,我想不自量力地给您一个建议:建议您找一本asp.net或c#的书,按书中的例子等一步步做,先练好基本功。例如:《asp.net3.5揭秘》等。要么就按msdn的例子演练。以现在您的基础一下就想研究体系结构。那么有很多时候您的思想是对的,可就因为一些小小的技术问题,却难以走下去,最终会导致信心全无,甚至推翻之前正确的思想。

    2011年2月27日 7:31
    版主
  • 很感谢你教导。之前也看过很多书籍,想迅速的提高自己的能力,真的很难。因此自己在实战遇到不懂的问题,就向各位请教下。

    十分感谢你


    you are welcome
    2011年2月28日 15:08
  • 遇到不懂的,解决方法很简单:

    1,查.net sdk,这些内容上面都有

    2,搜索网络,


    【孟子E章】
    2011年3月1日 0:35
    版主
  • 通过几次的试验后,最后得出来的答案,就是

    int
     primaryKeyValue = (int
    )GridView2.DataKeys[e.RowIndex].Value; 

    就需要在aspx上的GridView2设置datakeynames。例如:

    <asp:gridview id="GridView2"
            datakeynames="userID
            ......
            runat="server">
          </asp:gridview>

    Jiyuan 说的对。我们应该注意一点的是GridView2.DataKeys[e.RowIndex].Value;

    还是有datakeynames="userID

    多谢各位的回帖


    you are welcome
    2011年3月3日 15:11