在的ItemDataBound中继器嵌套 [英] ItemDataBound in Nested repeater
问题描述
我有一个嵌套Repeater在我的网页表单,我把两个ObjectDataSource的每个中继器。
我有这种方法在我repositiry:
公开的IQueryable< TourDate> GetById(INT标识)
{
返回model.TourDates.Where(E => e.TourId == ID);
}
我需要设置ItemDataBound事件。
在我写这篇code为ItemDataBound事件:
保护无效RptTourDetail_ItemDataBound(对象发件人,RepeaterItemEventArgs E)
{
如果(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] =默认值dataItem.TourId。
}
}
但它dosent承认TourId最后line.I觉得有什么错的是没有这种
VAR的DataItem = e.Item.DataItem;
没有任何人有任何想法什么问题呢?
如果需要一些解释有关projcet:
和HTML:
< ASP:ObjectDataSource控件ID =ODSTTitle=服务器SelectMethod =GetById的TypeName =ATourRep>
< SelectParameters>
< ASP:QueryStringParameter默认值=0NAME =IDQueryStringField =CIDTYPE =的Int32/>
< / SelectParameters>
< / ASP:ObjectDataSource控件>< ASP:ObjectDataSource控件ID =ObjectDataSource1=服务器SelectMethod =GetById的TypeName =ATourDateRep>
< SelectParameters>
< ASP:参数名称=ID类型=的Int32/>
< / SelectParameters>
< / ASP:ObjectDataSource控件>< DIV CLASS =容器ID =TourDetail> < ASP:直放站ID =RptTourDetail=服务器的DataSourceID =ODSTTitle的ItemType =游的EnableViewState =假OnItemDataBound =RptTourDetail_ItemDataBound>
<&HeaderTemplate中GT; < UL>
< / HeaderTemplate中>
<&ItemTemplate中GT;
<立GT;
&所述; IMG SRC =&下;%#Item.TImgUrl%gt;中ALT =替代文本级=IMG响应/>
< DIV CLASS =行>
< DIV CLASS =COL-MD-3>
<% - NestedRepeater - %GT;
&所述p为H.; <%#Item.TourId%GT; &所述; / P>
< ASP:直放站的ItemType =TourDateID =RptTourNested=服务器的EnableViewState =假的DataSourceID =ObjectDataSource1>
<&ItemTemplate中GT;
< H2> <%#Item.TourStartDate%GT;
< / H>
< / ItemTemplate中>
< / ASP:直放站>
< / DIV>
< DIV CLASS =COL-MD-6>
<% - 此列正常工作 - %GT;
< H4>
<%#Item.TName%GT;
< / H4>
&所述p为H.;
<%#Item.TDes%GT;
&所述; / P>
< / DIV>
< DIV CLASS =COL-MD-3> C< / DIV>
< / DIV> < /李> < / ItemTemplate中> < FooterTemplate>
< / UL>
< / FooterTemplate>
< / ASP:直放站> < / DIV>
有冲突变量的名称与控件的名称。尝试重命名
块引用>ObjectDataSource控件ObjectDataSource1 =(ObjectDataSource控件)e.Item.FindControl(ObjectDataSource1);
ObjectDataSource1.SelectParameters [TourId] =默认值dataItem.TourId。
要
块引用>ObjectDataSource控件objTourDataSource =(ObjectDataSource控件)e.Item.FindControl(ObjectDataSource1);
objTourDataSource.SelectParameters [TourId] =默认值dataItem.TourId。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;
这篇关于在的ItemDataBound中继器嵌套的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!