<asp:Repeater ID="rptDataList" runat="server" OnItemDataBound="RepeaterItemDataBound">
            <ItemTemplate>
                <h3>
                    <a href="#">
                        <asp:Label ID="lblGroupName" runat="server" >
                        <%# Eval("Id") %>
                        </asp:Label>
                    </a>
                </h3>
                <div>
                    <asp:GridView ID="GridViewList" runat="server" AutoGenerateColumns="False" 
                        OnRowDataBound="RowDataBound" >
                        <Columns>
                            <asp:TemplateField>
                                <ItemStyle Width="100px" />
                                <HeaderStyle HorizontalAlign="Left" />
                                <HeaderTemplate>
                                    ID
                                </HeaderTemplate>
                                <ItemTemplate>
                                    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="#"><%# Eval("Id") %></asp:HyperLink>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:BoundField HeaderText="Student Name" DataField="Studname" />
                            <asp:BoundField HeaderText="Phone" DataField="Phone" />
                        </Columns>
                    </asp:GridView>
                </div>
            </ItemTemplate>
        </asp:Repeater>
后台直接绑定了Repeater的数据源,h3里头的lblGroupName能正常显示
<asp:Label ID="lblGroupName" runat="server" >
            <%# Eval("Id") %>
</asp:Label>Gridview的数据源是以lblGroupName的值为参数的。
我用以下两种方法均不成功,都是获取不到lblGroupName,特来请教大伙。1、
protected void RepeaterItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        string phone = Pho_numTb.Text.Trim();
        var da2 = //……数据源
        Label lb = e.Item.FindControl("lblGroupName") as Label;
        GridView gv = e.Item.FindControl("GridViewList") as GridView;
        gv.DataSource = da2.Getdata(phone, lb.Text.Trim());
        gv.DataBind();
    }2、
public void BindSearchAddrList()
    {
        string phone = Pho_numTb.Text.Trim();
        var da = //……数据源
        var saa = da.GetSch_Name(phone);
        rptDataList.DataSource = saa;
        rptDataList.DataBind();        foreach(RepeaterItem rpi in rptDataList.Items)
        {
            Label lb = (Label)rpi.FindControl("lblGroupName");
            GridView gv = rptDataList.FindControl("GridViewList") as GridView;
            gv.DataSource = da.Getdata(phone, lb.Text.Trim());
            gv.DataBind();
        }
    }

解决方案 »

  1.   

    <asp:Label ID="lblGroupName" runat="server" Text=' <%# Eval("Id") %>'>
     
    </asp:Label>
      

  2.   

    Text=' <%# Eval("Id") %>
      

  3.   

    是你少了个判断,而且在获取GridView时也是有问题的,在你的第一个基础上改造如下,应该可以,你试试。protected void RepeaterItemDataBound(object sender, RepeaterItemEventArgs e)
    {
           if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
           {
                   string phone = Pho_numTb.Text.Trim();
                   var da2 = //……数据源
                   Label lb = e.Item.FindControl("lblGroupName") as Label;
                   GridView gv = (GridView )e.Item.FindControl("GridViewList");
                   gv.DataSource = da2.Getdata(phone, lb.Text.Trim());
                   gv.DataBind();
           }
    }
      

  4.   

    我用你的第1种方式
    Label lb = e.Item.FindControl("lblGroupName") as Label;
    是可以获取到值,你用
    Response.Write(lb.Text);
    看看是否真的获取不到,还是GridView的数据绑定有问题
      

  5.   


    string lb = (e.Item.FindControl("lblGroupName") as Label).toString();不想在前台页面让你的ID显示出来的话可以加个样式给他隐藏起来O(∩_∩)O~
      

  6.   

    调试调试吧 要不就  javascript  <%=...%>
    方法很多没必要吊在一棵树上吗