这是后台代码 protected void Page_Load(object sender, EventArgs e)
    {
          //获得最外面TypeName标题
        this.Repeater1.DataSource = BType.getTypeName().Tables[0];
        this.Repeater1.DataBind();      
    }    protected void Repeater1_ItemDataBound1(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater rpt = (Repeater)e.Item.FindControl("Repeater_1");
            DataRowView rowv = (DataRowView)e.Item.DataItem;
            int id = Convert.ToInt32(rowv["ID"]);
            rpt.DataSource = BType.getAllByStu(id).Tables[0];
            rpt.DataBind();
        }
    }前台 <div>
        <asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound1" 
            >
        <HeaderTemplate>
        <table>
        <tr>
        <td>
        产品名称
        </td>
        </tr>
        </HeaderTemplate>
        <ItemTemplate>
        
        <tr><td><%#Eval("typename")%></td></tr>
        <!--分类下的产品--> 
    <asp:Repeater id="rptProduct" runat="server" > 
      <ItemTemplate> 
       <tr><td><%#Eval("proname") %></td></tr>
      </ItemTemplate> 
    </asp:Repeater> 
        </ItemTemplate>
        <FooterTemplate></table></FooterTemplate>
        </asp:Repeater>
    </div>报错ID 既不是表 Table 的 DataColumn 也不是 DataRelation  请高手解决 在线等

解决方案 »

  1.   

    e.Item.DataItem 中没有绑定ID这一列,要在前台绑定时将ID绑定出来,后台才可以那样取值
      

  2.   

    请问 绑定的是最外层的ID 还是第2个repeater的ID?
      

  3.   

     DataRowView rowv = (DataRowView)e.Item.DataItem;
    根据你这句话来判断,是外层的rpt中绑定
      

  4.   

    int id = Convert.ToInt32(((DataRowView)e.Item.DataItem).Row["id"]);
      

  5.   

    如果绑定的是在外层的ID的话 根据外层的ID 查询出第二层的内容?
      

  6.   

    BType.getAllByStu(id).Tables[0];
    你的这个方法不是根据当前数据前来判断?
      

  7.   

    没错 是根据这个方法来获得第二个repeater的内容
      
      

  8.   

    你的e.Item.findControl("Repeater_1");应该改成e.Item.findControl("rptProduct")
      

  9.   

    已经改了 但还是显示id不属于table
      

  10.   

    ID 不属于TABle, 是因为你在绑定rpt1的时,你的e.Item.DataItem这行是根本就没有这ID这一列
      

  11.   

       
    //获得最外面TypeName标题
            this.Repeater1.DataSource = BType.getTypeName().Tables[0];
            this.Repeater1.DataBind();
    这个获得了最外层repeater的标题 也可以获得studid
    然后是根据studid来查询第二个repeater的内容
      

  12.   

    我帖我的代码给你看 <asp:Repeater ID="repeater1" runat="server" 
                                                            onitemdatabound="repeater1_ItemDataBound">
                                                    <HeaderTemplate>
                                                        <table width="75%" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
                                                          <tr>
                                                            <td height="30" bgcolor="#e6edf2"  align="center">角色  |   操作</td>
                                                            <asp:Repeater ID="repeater2" runat="server">
                                                                <ItemTemplate>
                                                                 <td height="30" align="center" bgcolor="#e6edf2"><span class="S1"><strong><%# Eval("powerName") %></strong></span></td>
                                                                </ItemTemplate>
                                                            </asp:Repeater>
                                                            <td height="30" align="center" bgcolor="#e6edf2"><span class="S1"><strong>操作</strong></span></td>
                                                          </tr>
                                                         </HeaderTemplate>
                                                         <ItemTemplate>
                                                          <tr>
                                                          <td height="30" align="center" bgcolor="#FFFFFF"><span class="S1">
                                                          <asp:Label ID="lab" runat="server" Text='<%# Eval("roleID") %>' Visible="true"></asp:Label> | <%# Eval("roleName") %>
                                                          </span>
                                                          </td>
                                                        <asp:Repeater ID="repeater3" runat="server" onitemdatabound="repeater3_ItemDataBound">
                                                          <ItemTemplate>
                                                              <td bgcolor="#FFFFFF" align="center"><asp:Label ID="ss" runat="server"  Visible="false" /> <asp:Label ID="labpower" runat="server" Text='<%# Eval("powerID") %>' Visible="false"></asp:Label> | <asp:CheckBox ID="checkBox"    oncheckedchanged="checkBox_CheckedChanged"  AutoPostBack="true"  runat="server" /> </td>
                                                         </ItemTemplate>
                                                        </asp:Repeater>
                                                            <td bgcolor="#FFFFFF" align="center"><span class="S1">左边勾选</span></td>
                                                          </tr>
                                                          </ItemTemplate>
                                                          <FooterTemplate>
                                                        </table>
                                                        </FooterTemplate>
                                                    </asp:Repeater>
    cs    protected void repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                Entity.PowerEntity pw = new Entity.PowerEntity();
                pw.powerWhere = "parentID<>0";
                if (e.Item.ItemType == ListItemType.Header)//找到表头中的repeater2并为它绑定数据
                {              
                    Repeater rep = (Repeater)e.Item.FindControl("repeater2");
                    DataSetBind(pw, rep);
                }
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)//找到模版中的repeater3并为它绑定数据(权限操作的数据源)
                {
                    Repeater rep = (Repeater)e.Item.FindControl("repeater3");
                    DataSetBind(pw, rep);
                }
                
            }
            protected void repeater3_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                int rolepowerids = 0;
                int roleIDs = 0;
                int powerIds = 0;
                bool isBool = false;
                Entity.RolePowerEntity rolepowers = new Entity.RolePowerEntity();
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    roleIDs = Convert.ToInt32(((DataRowView)((RepeaterItem)((Repeater)sender).NamingContainer).DataItem)["roleID"].ToString());
                    //用到内层Repeater的NamingContainer属性得到包含了它的外层Repeater的RepeaterItem,得到角色的ID号                powerIds = Convert.ToInt32(((Label)e.Item.FindControl("labpower")).Text);//找到该列的权限操作的ID号
                    rolepowers.PowerID = powerIds;
                    rolepowers.RoleID = roleIDs; 
                    Entity.RolePowerEntity rp = logic.RolePower.Exquery_RolePower_List(rolepowers); //通过该方法返回一条数据,为下面的chbox赋值,这里是关健
                    CheckBox ck = ((CheckBox)e.Item.FindControl("checkBox"));
                    Label lb = (Label)e.Item.FindControl("ss");
                    lb.Text = rp.RolePowerID.ToString();
                    ck.Checked = rp.isRole;               //将变量保存到选框中的属性中
                    ck.Attributes.Add("rolePowerID",rp.RolePowerID.ToString());
                    ck.Attributes.Add("roleID", rp.RoleID.ToString());
                    ck.Attributes.Add("powerID", rp.PowerID.ToString());
                }
            }
      

  13.   

    问题几经解决 非常感谢 你们的回答 
    一个是e.Item.findControl("Repeater_1");应该改成e.Item.findControl("rptProduct")后面的repeaterID写错了
    一个是 int id = Convert.ToInt32(((DataRowView)e.Item.DataItem).Row["id"]);
    没有绑定自己想绑定的studid  非常感谢
      

  14.   

    我帮你改改,,不知道楼主要的是不是这样的效果 <div>
            <asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound1" 
                >
            <HeaderTemplate>
            <table>
            <tr>
            <td>
            产品名称
            </td>
            </tr>
            </HeaderTemplate>
            <ItemTemplate>
            
    <tr><td>
    <%#Eval("typename")%>
    <input type="hidden" id="hd_id" runat="server" value="<%# Eval(ID号) %>" />
    </td></tr>
            <!--分类下的产品--> 
        <asp:Repeater id="rptProduct" runat="server" > 
          <ItemTemplate> 
           <tr><td><%#Eval("proname") %></td></tr>
          </ItemTemplate> 
        </asp:Repeater> 
            </ItemTemplate>
            <FooterTemplate></table></FooterTemplate>
            </asp:Repeater>
        </div>后台修改 protected void Page_Load(object sender, EventArgs e)
        {
              //获得最外面TypeName标题
            this.Repeater1.DataSource = BType.getTypeName().Tables[0];
            this.Repeater1.DataBind();      
        }    protected void Repeater1_ItemDataBound1(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                Repeater rpt = (Repeater)e.Item.FindControl("rptProduct");
                int id = 0;
              HtmlInputHidden hd=(HtmlInputHidden )e.item.findControl("hd_id");
              int.TryParse(hd.value,out id);
                rpt.DataSource = BType.getAllByStu(id).Tables[0];
                rpt.DataBind();
            }
        }
      

  15.   

         <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater2">
                <ItemTemplate>
                    <%#Eval("uname") %>
                    <%#Eval("upass") %><br />               
                        <asp:Repeater ID="Repeater2" runat="server">
                            <ItemTemplate>
                             abc<%#Eval("uname") %>
                            efg<%#Eval("upass") %><br />   
                            </ItemTemplate>
                        </asp:Repeater>
                </ItemTemplate>            
            </asp:Repeater>
    后台代码 protected void Page_Load(object sender, EventArgs e)
        {        Repeater1.DataSource = UserInfoManager.getUserInfoByLinq();
            Repeater1.DataBind();
            
         
            
        }
        protected void Repeater2(object sender, RepeaterItemEventArgs e)
        {
            
            Repeater rep = e.Item.FindControl("Repeater2") as Repeater;
            if (rep != null)
            {
                rep.DataSource = UserInfoManager.getUserInfoByLinq();
                rep.DataBind();
            }
         
        }