2012-04-12 120 views
1

更新:顯示數據

行空

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

修改我實在不明白頁腳是如何將你想要的東西的工作。整個中繼器只有一個頁腳。如果DateChecked對於數據源的每一行都不相同,那麼如何確定頁腳中應顯示的內容? – SouthShoreAK 2012-04-12 14:41:09

+0

我明白,但我怎麼能在每一行的頁腳數據? – 2012-04-12 14:46:31

+0

嗯看起來像我不得不使用中繼器內的中繼器? – 2012-04-12 14:51:06

回答

3

FooterTemplate不與每一行呈現的,所以你不能綁定DateItem的評論到頁腳這樣。

似乎只有一個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(); 
    } 
} 
綁定中繼器10
+0

所以對於每一行我都會有不同的DateChecked ...所以在這種情況下使用GridView是什麼?或任何其他控制迭代? – 2012-04-12 14:22:17

+0

我已經更新了我的問題 – 2012-04-12 14:36:28

+0

在你必須把頁腳模板內的另一箇中繼器,並綁定該轉發器的RowDataBound事件的話,我已經更新了我的答案 – 2012-04-12 15:02:43

1

FooterTemplate未綁定到數據項。當構建中繼器時,FooterTemplate中的控件不會綁定,因此不會評估數據綁定表達式。

你可以做的是使用FindControl方法。

rpt.DataSource = mydatasource; 
rpt.DataBind(); 

var lblDateTime = rpt.FindControl("lblDateTime") as Label; 
if (lblDateTime != null) 
{ 
    lblDateTime.Text = mydatasource.First().DateChecked; 
} 

你看,我打電話的第一個()方法來獲得一個項目,這是因爲只有一個繪製頁腳,這就是爲什麼我說這個模板是不是爲項目。

+0

我已更新我的問題 – 2012-04-12 14:36:34

+0

您仍然沒有明白。 FooterTemplate沒有實例化,當控制循環遍歷項目時,在循環結束後創建。 – 2012-04-12 14:42:18

+0

我明白,但我怎麼能在每一行頁腳的數據? – 2012-04-12 14:46:54

3

頁腳僅針對整個數據集呈現一次,而針對集合中的每個項目呈現項目模板。

EDIT

中繼呈現像這樣:

部首

的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> 

編輯完

你可能會覆蓋th e 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 */; 
     } 
    } 
+0

我已經更新了我的問題 – 2012-04-12 14:36:14

+0

DataBound是正確的事件(在ItemDataBound的頁腳沒有構建) – 2012-04-12 15:08:33