2016-03-23 23 views
0

Web formumda bir Nested tekrarlayıcı var ve her bir tekrarlayıcı için iki ObjectDataSource koydum.İç içe tekrarlayıcıda ItemDataBound

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

Ben ItemDataBound olayı ayarlayın gerekir:

benim repositiry bu yöntemi var.

Ben ItemDataBound olay için bu kodu yazmak:

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


} 

ama son line.I yanlış bir şey kimse bir fikrin var mı bu

var dataItem = e.Item.DataItem; 

orada olduğunu düşünüyorum at TourId tanımak dosent neyin sorun?

gerekirse projcet hakkında bazı açıklamalar:

<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

"ObjectDataSource1" adını başka bir isme dönüştürüyor mu? – Bikee

cevap

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: Burada

modelim enter image description here

ve html olduğunu

+0

Denedim. ama değişmedi. hala TourId'i tanımıyor. Bakımınız için çok teşekkürler –

+0

DataItem'de bir sorun olduğunu düşünüyorum. TourId ve diğer gibi alanları tanımıyor. befor objectdatasource Başlatma –

+0

"GetById" yönteminiz ne kadar geri geliyor? eğer bir Liste Eğer bunu deneyin: 'T dataRow = e.Item.DataItem T olarak; if (dataRow! = Null) { var tourId = dataRow.TourId.ToString(); } ' – Bikee