2016-03-23 20 views
0

私は自分のWebフォームでネストされたリピータを持っており、私は各リピータに対して2つのObjectDataSourceを配置します。ItemDataBoundネストされたリピータ

私は私のrepositiryでこのメソッドを持っている:

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

私はItemDataBoundイベントを設定する必要があります。

私はItemDataBoundイベントのために、このコード記述:

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


} 

をそれが最後line.Iが間違った何かが、誰もが任意のアイデアを持っていないこの

var dataItem = e.Item.DataItem; 

であると思うでTourIdを認識dosentいただきました!問題?

必要に応じてprojcetに関するいくつかの説明:

<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"の名前を別の名前に変更する作業はありますか? – Bikee

答えて

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

は私のモデル enter image description here

とhtmlです

+0

私はしようとしました。それは変わらない。それでもTourIdは認識されません。あなたのケアのために本当にありがとう –

+0

私はdataItemにいくつかの問題があると思います。それはTourIdなどのフィールドを認識しません。 even be objectdatasource初期化 –

+0

"GetById"メソッドは何を返しますか?そのリストの場合次にこれを試してください: 'T dataRow = e.Item.DataItem as T; (データロー!= null) } ' – Bikee

関連する問題