我页面有一个repeat和gridview ,gridview是嵌套在repeat里面的
repeat有个rptRuMen_ItemDataBound事件
gridview有个GridView1_RowDataBound事件,本来要repeat先加载数据在加载gridview,现在老是先执行gridview的
GridView1_RowDataBound事件,这是为什么?能解决吗?

解决方案 »

  1.   

    还是那个问题吧?楼主
    你先给Repeater绑定数据源,然后FindControl,找到GridView的时候再给他绑定数据源。
      

  2.   

    你的gridview的数据源是在repeat的ItemDataBound绑定事件里绑定的,所以在Repeater的每一项数据绑定的时候,就给GridView绑定了数据源。
      

  3.   

    是呀,但是他老是先跳到GridView1_RowDataBound执行完后再跳到ItemDataBound事件
      

  4.   

    这两个事件应该是在调用了DataBind方法之后才触发的,所以他们两个的顺序取决于你调用DataBind方法的顺序。如果是嵌套的结构,你需要在父容器绑定的时候再给子控件绑定。
      

  5.   

    是的,因为你是在repeater的ItemDataBound事件里嵌套了gridView的RowDataBound事件。稍等片刻,马上解决。
      

  6.   


     protected void rptRuMen_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Label lbl = e.Item.FindControl("lblID") as Label;
            int id = Convert.ToInt32(lbl.Text);
            DataSet ds = VirtualHostManager.GetList(" HostTypeId =" + id);
            GridView gv = e.Item.FindControl("GridView1") as GridView;
            DataTable tb = ds.Tables[0];
            if (tb.Rows.Count > 0)
            {
                gv.DataSource = tb;
                gv.DataBind();
            }
            Session["gv"] = gv;
            gv.RowDataBound += new GridViewRowEventHandler(gv_RowDataBound);
        }
    之前的事件是我把gridview拖出来点击然后再放进去,
    现在我把这个gridview事件去掉,自己在外面写了void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    但是就关联不进去
      

  7.   

    你那样不行啊,应该在ItemDataBound的时候动态注册事件,代码如下:protected void rptRuMen_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        GridView gridview1 = e.Item.FindControl("GridView1") as GridView;
        gridview1.RowDataBound += new GridViewRowEventHandler(gridview1_RowDataBound);
    }void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        throw new Exception("The method or operation is not implemented.");
    }
      

  8.   

    在GridView数据源绑定数据之前添加RowDataBound事件。
      

  9.   


    红色 顺序 不对哦。 要现添加 gv_rowdatabind   再 来给gv 绑定数据
      

  10.   

    不用DATABOUND试下吧在BIND方法之后直接写,代码会顺序执行下来,直接对GRIDVIEW操作如果是动态添加多个GRIDVIEW的话就嵌套在rptRuMen_ItemDataBound方法里边!PS:我打疫苗打傻了,耳朵失聪,严重感冒,看代码都看不懂了,早上给别人讲自己写的代码,硬是记不起来是自己啥时候写过的还没打疫苗的同志们,没事别打针啊,我靠,太可怕了!
      

  11.   

    谢谢了,可以关联进去了,但是在  void gv_RowDataBound(object sender, GridViewRowEventArgs e) 事件里面怎么获取嵌在repeat里面那个gridview对象
      

  12.   

    我在看鼠标的, msdn 文档放入代码好参考    //Mouse events occur in the following order: 
        //MouseEnter 
        //MouseMove 
        //MouseHover / MouseDown / MouseWheel
        //MouseUp 
        //MouseLeave 
        //Depressing a mouse button when the cursor
        //is over a control typically raises the
        //following series of events from the control:
        //MouseDown event.
        //Click event.
        //MouseClick event.
        //MouseUp event.msdn 都有写
      

  13.   


    你按下面 试试 看看 
    C# codeprotectedvoid rptRuMen_ItemDataBound(object sender, RepeaterItemEventArgs e) 
        { 
            Label lbl= e.Item.FindControl("lblID")as Label;int id= Convert.ToInt32(lbl.Text); 
            DataSet ds= VirtualHostManager.GetList(" HostTypeId ="+ id); 
            GridView gv= e.Item.FindControl("GridView1")as GridView; 
            Session["gv"]= gv; 
            gv.RowDataBound+=new GridViewRowEventHandler(gv_RowDataBound); 

            DataTable tb= ds.Tables[0];if (tb.Rows.Count>0) 
            { 
                gv.DataSource= tb; 
                gv.DataBind(); 
            } 
            
        }
      

  14.   


    GridView gv = sender as GridView;
      

  15.   


     void gv_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            GridView gv = sender as GridView;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (i == 0)
                {
                    logo = e.Row.Cells[3].Text;
                    i++;
                }
                else
                {
                    if (logo == e.Row.Cells[3].Text)//如果这一行与上一行的相等
                    {
                        j++;
                    }
                    else
                    {
                        gv.Rows[i - 1 - j].Cells[3].RowSpan = j + 1;
                        for (int x = j; x > 0; x--)
                        {
                            gv.Rows[i - x].Cells[3].Visible = false;
                        }                    j = 0;
                        logo = e.Row.Cells[3].Text;
                    }
                    i++;
                }        }
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                gv.Rows[i - 1 - j].Cells[3].RowSpan = j + 1;
                for (int x = j; x > 0; x--)
                {
                    gv.Rows[i - x].Cells[3].Visible = false;
                }            j = 0;
                logo = e.Row.Cells[3].Text;
            }
        }
    嵌在里面的gridview相同的列要跨行, GridView gv = sender as GridView; gv.Rows.Count为0
      

  16.   

    然后就是一直报,gridview,超出行号
      

  17.   

    因为你在绑定数据的时候还没有行增加呢,你可以试试RowCreated事件。
      

  18.   

    为什么还在用gridview 
    还是Repeater     方便灵活些