简体   繁体   中英

ItemDataBound in Nested repeater

I have a Nested repeater in my web form and I put two ObjectDataSource for each repeater.

I have this method in my repositiry:

 public IQueryable<TourDate> GetById(int Id)
{
    return model.TourDates.Where(e => e.TourId == Id);
}

I need to Set ItemDataBound event .

I write this code for ItemDataBound event:

 protected void RptTourDetail_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
   if (e.Item.ItemType == ListItemType.AlternatingItem ||
    e.Item.ItemType == ListItemType.Item)
{
var dataItem = e.Item.DataItem;
ObjectDataSource ObjectDataSource1 = (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
    ObjectDataSource1.SelectParameters["TourId"].DefaultValue = dataItem.TourId;
 }


}

but it dosent recognize TourId at last line.I think something wrong is there with this

var dataItem = e.Item.DataItem;

does anyone have any idea whats the problem?

some explanation about projcet if needed:

here is my model 在此处输入图片说明

and html:

<asp:ObjectDataSource ID="ODSTTitle" runat="server" SelectMethod="GetById"     TypeName="ATourRep">
        <SelectParameters>
            <asp:QueryStringParameter DefaultValue="0" Name="Id"  QueryStringField="CID" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"  SelectMethod="GetById" TypeName="ATourDateRep">
        <SelectParameters>
            <asp:Parameter Name="Id" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>

<div class="container" id="TourDetail">

        <asp:Repeater ID="RptTourDetail" runat="server" DataSourceID="ODSTTitle" ItemType="Tour" EnableViewState="false" OnItemDataBound="RptTourDetail_ItemDataBound">
            <HeaderTemplate>

                <ul>
            </HeaderTemplate>
            <ItemTemplate>
                <li>


<img src="<%# Item.TImgUrl %>" alt="Alternate Text" class="img-responsive" />
                    <div class="row">


                        <div class="col-md-3">
                            <%-- NestedRepeater --%>
                            <p>

                                <%# Item.TourId %>

                            </p>
                            <asp:Repeater ItemType="TourDate" ID="RptTourNested" runat="server" EnableViewState="false" DataSourceID="ObjectDataSource1">
                                <ItemTemplate>
                                    <h2>

                                   <%# Item.TourStartDate %>
                                         </h2>
                                </ItemTemplate>
                            </asp:Repeater>
                        </div>


                        <div class="col-md-6">
                            <%-- This Column works correctly --%>
                            <h4>
                                <%# Item.TName %>
                            </h4>
                            <p>
                                <%# Item.TDes %>
                            </p>
                        </div>


                        <div class="col-md-3">c</div>
                    </div>

                </li>

            </ItemTemplate>

            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>

    </div>

There's conflict in variable's name with control's name. Try to Rename

    ObjectDataSource ObjectDataSource1 = (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
ObjectDataSource1.SelectParameters["TourId"].DefaultValue = dataItem.TourId;

To

    ObjectDataSource objTourDataSource= (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
objTourDataSource.SelectParameters["TourId"].DefaultValue = dataItem.TourId;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM