2016-03-23 12 views
0

Ich habe eine verschachtelte Repeater in meinem Webformular und ich habe zwei ObjectDataSource für jeden Repeater.ItemDataBound in verschachtelten Repeater

Ich habe diese Methode in meinem repositiry:

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

Ich brauche ItemDataBound Veranstaltung ein.

Ich schreibe diesen Code für ItemDataBound Veranstaltung:

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; 
} 


} 

aber es dosent TourId erkennen endlich Linie in Verbindung denken, dass etwas falsch ist, da mit diesem

var dataItem = e.Item.DataItem; 

hat jemand eine Idee, was die Problem?

eine Erklärung über projcet, wenn nötig:

hier ist mein Modell enter image description here

und 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> 
+0

Funktioniert die Umbenennung von "ObjectDataSource1" in einen anderen Namen? – Bikee

Antwort

1

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; 
+0

Ich habe versucht. aber es hat sich nicht geändert. trotzdem erkennt es TourId nicht. Wirklich danke für Ihre Pflege –

+0

Ich denke, es gibt ein Problem in DataItem. Es erkennt keine Felder wie TourId und andere. sogar vor objektdatasource Initialisierung –

+0

Was gibt Ihre Methode "GetById" zurück? Wenn es eine Liste ist Dann versuchen Sie dies: 'T dataRow = e.Item.DataItem als T; if (dataRow! = Null) { var tourId = dataRow.TourId.ToString(); } ' – Bikee

Verwandte Themen