2

更新:

行为空

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();

}

结束更新:

如何在转发器页脚中显示数据?...

我花了很多时间来弄清楚这非常愚蠢,但是如果我将其移至 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();
4

3 回答 3

3

整个数据集的页脚只呈现一次,而项目模板则为集合中的每个项目呈现。

编辑

中继器渲染如下:

标题

项目模板

项目模板

...(数据源中每个项目的一个项目模板)

项目模板

项目模板

页脚

如果您希望某些内容出现在每行的页脚中,您只需将该标记添加到您的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 */;
      }
   } 
于 2012-04-12T14:21:15.640 回答
3

FooterTemplate 不会与每一行一起呈现,因此您不能像这样将 DateItem 的 Comment 绑定到页脚。

似乎只有一个 Date Checked 您想在页脚中显示。

您正在查看 DataItem 中的 DateChecked ,每行可能不同。

如果所有行都包含相同的 DateChecked 您可以创建一个服务器端属性来存储它,如果所有行都相同,则可以使用任何行 Datechecked 如果不是,您可以存储要在页脚中显示的任何日期(它应该是任何一个日期)使用页脚中的以下块以显示 DateChecked <% = PropertyName %> 或者由于您已经在页脚中放置了标签,您可以使用此属性直接从服务器端绑定 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();
  }
} 
于 2012-04-12T14:15:17.107 回答
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() 方法来获取单个项目,这是因为只有一个渲染的页脚,这就是为什么我说这个模板不适用于项目。

于 2012-04-12T14:17:06.217 回答