我写了GridView的RowCommand事件,但是点击GridView中的某些按钮的时候,没有触发RowCommand事件,这是为什么啊?

解决方案 »

  1.   

    GridView1_RowDataBound 事件里 写东西了 
    贴出代码
      

  2.   

    楼主把你的代码贴出来看看,这个是我以前的呢可以参考一下,要用if(e.CommandName=="")来判断。。
     protected void gvCourses_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                                if (e.CommandName == "Del")
                    {
                        try
                        {
                            int count = Convert.ToInt32(e.CommandArgument);
                            StudentsInfo stu = new StudentsInfo();
                            stu.DeleteSyllabus(count);                        
                            CoursesInfo cou = new CoursesInfo(count);
                            cou.Delete();
                            tran.VoteCommit();
                            Banding();
                        }
                        catch (Exception ex)
                        {
                            tran.VoteRollback();
                            throw ex;
                        }
                    }
                
            }
      

  3.   

     //GridView中的行事件
            protected void gvShow_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                Response.Write("<script>alert('afsda');</script>");
                int id = Convert.ToInt32(e.CommandArgument.ToString());
                String cmdName = e.CommandName;
                ImageButton ib = (sender as ImageButton);
                GridViewRow row = ib.Parent.Parent as GridViewRow;
                int index = row.DataItemIndex;
                int upId = 0;
                int num = Convert.ToInt32((row.FindControl("LabelNum") as Label).Text);
                int downId = 0;
                switch (cmdName)
                {
                    case "edit":
                        {
                            Response.Redirect("AddNews.aspx?id=" + id);
                            break;
                        }
                    case "up":
                        {
                            if (index == 0)
                            {
                                upId = NewsBLL.GetIdByNum(num - 1);
                            }
                            else
                            {
                                GridViewRow row1 = gvShow.Rows[index - 1];
                                upId = Convert.ToInt32((row1.FindControl("LabelId") as Label).Text);
                            }
                            if (upId != 0)
                            {
                                int result = 0;
                                result = NewsBLL.UpdateNum(id, 2);
                                result += NewsBLL.UpdateNum(upId, 1);
                                if (result > 0)
                                {
                                    Common.showResult(this, "操作成功!", "NewsList.aspx?typeId=" + typeId);
                                }
                                else
                                {
                                    Common.showResult(this, "由于某种原因,操作失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId);
                                }
                            }
                            else
                            {
                                Common.showResult(this, "已经是第一条新闻!", "NewsList.aspx?typeId=" + typeId);
                            }
                            break;
                        }
                    case "down":
                        {
                            if (index == (gvShow.Rows.Count - 1))
                            {
                                downId = NewsBLL.GetIdByNum(num + 1);
                            }
                            else
                            {
                                GridViewRow row1 = gvShow.Rows[index + 1];
                                downId = Convert.ToInt32((row1.FindControl("LabelId") as Label).Text);
                            }
                            if (downId != 0)
                            {
                                int result = 0;
                                result = NewsBLL.UpdateNum(id, 1);
                                result += NewsBLL.UpdateNum(downId, 2);
                                if (result > 0)
                                {
                                    Common.showResult(this, "操作成功!", "NewsList.aspx?typeId=" + typeId);
                                }
                                else
                                {
                                    Common.showResult(this, "由于某种原因,操作失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId);
                                }
                            }
                            else
                            {
                                Common.showResult(this, "已经是最后一条新闻,无法下移!", "NewsList.aspx?typeId=" + typeId);
                            }
                            break;
                        }
                    default:
                        {
                            int result = 0;
                            result = NewsBLL.Dele(id);
                            if (result > 0)
                            {
                                Common.showResult(this, "删除成功!", "NewsList.aspx?typeId=" + typeId);
                            }
                            else
                            {
                                Common.showResult(this, "由于某种原因删除失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId);
                            }
                            break;
                        }
                }
            }
    上面的是代码 我设置断点的 都没有进到这个事件里面
      

  4.   

    页面上每调用这个方法吧。看看你控件上有没有写,OnRowCommand=”“事件
      

  5.   

    是不是你的button的CausesValidation被改成true,然后你页面又用了验证控件总不可能你的事件没跟你的gv关联吧。
      

  6.   

    gvShow_RowCommand有没有绑定给GridView?
      

  7.   

    <asp:GridView ID="gvShow" runat="server" OnRowCommand="gvShow_RowCommand">
    </asp:GridView>
      

  8.   

    我在gridView中写了OnRowCommand="gvShow_RowCommand";
      

  9.   

    我在GridView里面写的OnRowCommand="" 
    模板列中有些图片按钮 点击的时候他会自动触发这个事件吧
    根据不同的commandName处理不同的事件
      

  10.   


    是会触发的啊,你要写条件啊if(e.CommandName==="edit")
    {
       //your code 
    }
      

  11.   

    你要设置要点击控件的CommandName和CommandArgument值
    然后再RowCommand事件里判断
      

  12.   

    我页面前台有指定commandName 和commandArguments的
      

  13.   

    不清楚你这个具体问题是什么。
    试下别用手写指定事件。
    右建GRIDVIEW > 属性 > 事件 > 选中rowcommand,看后面的下拉列表中有可以调用的事件吗?
    有的话直接选中调用,没有的话创建个事件,把原来的代码copy过来吧
      

  14.   

    你没贴其他代码,猜测应该是你在Page_Load事件或Page_Init事件中对GridView进行了数据绑定,而没有判断PostBack造成的
      

  15.   

    你没贴其他代码,猜测应该是你在Page_Load事件或Page_Init事件中对GridView进行了数据绑定,而没有判断PostBack造成的
      

  16.   

    猜测应该是你Page_Load事件没处理IsPostBack,重新绑定gridview数据造成的
    检测你的数据绑定点,看看哪些是在rowcommand事件前发生的
      

  17.   

    或许也许大概 PageLoad出了问题。
      

  18.   

    可能是VS出了问题吧!同样的代码 重新写了一遍 就触发RowCommand事件了 ,在这里可以根据CommandName的不同,做出不同的处理,但是又出现了一个问题,怎样获得点击的这一行的行号啊?比方说是Button 触发了RowCommand事件 我在事件里面这样写Button btn=sender as Button;但是判断的时候btn为null
      

  19.   

    在RowCommand事件中获得Button应该是:
    Button btn = (Button)e.CommandSource;
      

  20.   

    他们都说在rowCommand事件里面直接写int index=Convert.toInt32(e.CommandArguments.toString());这样就可以了,但是我的Button是在ItemTemplate模板中的,而且我的Button绑定的是一个数据库中的字段,我想问一下,有没有办法让这个Button的CommandArgument同时绑定行下标和数据库中的一个字段啊?
      

  21.   

    这样不是还要再查一下数据库吗?我想直接获得某些信息(GridView中绑定的有)然后直接操作了。
      

  22.   

    获取了点击的Button,则就可以的到所在行号,得到所在行号,就可以得到某列的数值!!
    没必要用e..CommandArguments;代码如下:
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.ToString() == "你的CommandName")
            {
                Button btn = (Button)e.CommandSource;
                int Index = ((GridViewRow)(btn.NamingContainer)).RowIndex;//获得行号
                  string str =GridView1.Rows[Index].Cells[1].Text;//获得第一列的值
            }
         }
      

  23.   

    cell[0]是第一列,列索引从0开始,楼上有点小错,呵呵
      

  24.   

    哦。。this.GridView1.EditIndex   或者  this.GridView1.SelectedIndex
      

  25.   

    这个获得的都是-1 还是 koukoujiayi的方法可行
    谢谢大家了