更新
行为空
if (e.Item.ItemType == ListItemType.Footer)
{
Label lblDateCreated = e.Item.FindControl("lblDateCreated ") as Label;
DataRowView row = (DataRowView)e.Item.DataItem; //row is null here <<<<
lblDateCreated .Text = row["DateChecked"].ToString();
}
END UPDATE:
如何在转发器页脚中显示数据?...
非常愚蠢,我花了很多时间搞清楚,但如果我移动相同的itemtemplate然后它的显示但不在页脚...下面是我的代码..
<asp:Repeater ID="rpt" runat="server">
<HeaderTemplate>
header...
</HeaderTemplate>
<ItemTemplate>
<div class="rpt">
<div class="inner">
<div>
<div class="ert">
<%#DataBinder.Eval(Container.DataItem, "Comment")%>
</div>
</div>
</div>
</div>
<br />
</ItemTemplate>
<FooterTemplate>
footer.....
<div id="datetime">
<asp:Label ID="lblDateTime" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "DateChecked")%>'></asp:Label>
</div>
<div id="save">
<p>
<asp:HyperLink ID="Hyperlink2" runat="server" NavigateUrl="~/link.aspx"
Text="More"></asp:HyperLink></p>
</div>
</FooterTemplate>
</asp:Repeater>
代码隐藏:
rpt.DataSource = mydatasource;
rpt.DataBind();
答案 0 :(得分:3)
不会为每一行呈现FooterTemplate,因此您无法将DateItem的注释绑定到这样的页脚。
似乎只有一个Date Checked要在页脚中显示。
您正在寻找DataItem中的DateChecked,每行可能有所不同。
如果所有行都包含相同的DateChecked,你可以创建一个服务器端属性来存储它,你可以使用任何行Datechecked如果所有都相同,你可以存储你想在页脚中显示的任何日期(它应该是任何一个)日期) 在页脚中使用以下块来显示DateChecked &lt;%= PropertyName%&gt; 要么 由于您已将Label放置在页脚中,因此可以使用此属性直接从服务器端绑定lblDateTime。
rpt.DataSource = mydatasource;
rpt.DataBind();
var lblDateTime = rpt.FindControl("lblDateTime") as Label;
if (lblDateTime != null)
{
lblDateTime.Text = mydatasource.First().DateChecked;
}
在页脚控件中绑定中继器
void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
// This event is raised for the header, the footer, separators, and items.
// Execute the following logic for Footer only.
if (e.Item.ItemType == ListItemType.Footer) {
footerRepeater.DataSource = mydatasource;
footerRepeater.DataBind();
}
}
ASPX
<asp:Repeater ID="rpt" runat="server">
<HeaderTemplate>
header...
</HeaderTemplate>
<ItemTemplate>
<div class="rpt">
<div class="inner">
<div>
<div class="ert">
<%#DataBinder.Eval(Container.DataItem, "Comment")%>
</div>
</div>
</div>
</div>
<br />
</ItemTemplate>
<FooterTemplate>
footer.....
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<div>
<asp:Label ID="lblDateTime" runat="server" DataBinder.Eval(Container.DataItem, "DateChecked")%>'></asp:Label>
</div>
</ItemTemplate>
</asp:Repeater>
</FooterTemplate>
</asp:Repeater>
CS
在页脚控件中绑定中继器
void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
// This event is raised for the header, the footer, separators, and items.
// Execute the following logic for Footer only.
if (e.Item.ItemType == ListItemType.Footer) {
footerRepeater.DataSource = mydatasource;
footerRepeater.DataBind();
}
}
答案 1 :(得分:3)
页脚仅为整个数据集呈现一次,而为集合中的每个项目呈现项目模板。
修改的
Repeater呈现如下:
标题
的ItemTemplate
的ItemTemplate
...(数据源中每个项目的一个项目模板)
的ItemTemplate
的ItemTemplate
页脚
如果您想在每行的页脚中显示某些内容,只需将该标记添加到ItemTemplate
<ItemTemplate>
<div class="rpt">
<div class="inner">
<div>
<div class="ert">
<%#DataBinder.Eval(Container.DataItem, "Comment")%>
</div>
</div>
</div>
</div>
<br />
<div class="footer">
footer.....
<div id="datetime">
<asp:Label ID="lblDateTime" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "DateChecked")%>'></asp:Label>
</div>
</div>
</ItemTemplate>
结束编辑
您可以覆盖ItemDataBound或DataBound事件,并在需要设置值时访问其页脚。
从MSDN修改
void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
// This event is raised for the header, the footer, separators, and items.
// Execute the following logic for Footer only.
if (e.Item.ItemType == ListItemType.Footer) {
((Label)e.Item.FindControl("lblDateTime")).Text= /* your value */;
}
}
答案 2 :(得分:1)
FooterTemplate 未绑定到数据项。构建转发器时, FooterTemplate 中的控件不会绑定,因此不会计算数据绑定表达式。
您可以使用FindControl方法。
rpt.DataSource = mydatasource;
rpt.DataBind();
var lblDateTime = rpt.FindControl("lblDateTime") as Label;
if (lblDateTime != null)
{
lblDateTime.Text = mydatasource.First().DateChecked;
}
你看,我正在调用First()方法来获取单个项目,这是因为只有一个渲染的页脚,这就是为什么我说这个模板不适用于项目。