2011-11-03 35 views
3

例如在後端我結合確定時代到中繼器,並在前端我設立我的中繼器作爲這樣的某些項目的輸出:格式化勢必直放站

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"> 
    <ItemTemplate> 
    <div class="user"> 
     Name: <%# DataBinder.Eval(Container, "DataItem.Name")%> 
     Email: <%# DataBinder.Eval(Container, "DataItem.Email")%> 
     Active: <%# DataBinder.Eval(Container, "DataItem.Active")%> 
     Status: <%# DataBinder.Eval(Container, "DataItem.Status")%> 
    </div> 
    </ItemTemplate> 
</asp:Repeater> 

所以輸出「名稱」和「電子郵件」是好的。然而,「活動」和「狀態」打印出一個整數代碼,我想根據我有的參考表更改爲更具描述性的字符串。

我猜我可以在轉發器的「ItemDataBound」事件上做到這一點,但我堅持我的下一步應該是,即檢查兩個字段,我需要修改和更改它們。

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     //Do modifications here 
    } 
} 

回答

4

您可以

  1. 處理格式化的ItemDataBound事件
  2. 創建您的網頁或WebUserControl類來處理公共方法:

    <asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"> 
        <ItemTemplate> 
        <div class="user"> 
         Name: <%# DataBinder.Eval(Container, "DataItem.Name")%> 
         Email: <%# DataBinder.Eval(Container, "DataItem.Email")%> 
         Active: <%# FormatActive((int)DataBinder.Eval(Container, "DataItem.Active"))%> 
         Status: <%# FormatStatus((int)DataBinder.Eval(Container, "DataItem.Status"))%> 
        </div> 
        </ItemTemplate> 
    </asp:Repeater> 
    
    在後面的代碼

    然後格式。

使用選項1會要求你申報了控制,如標籤,保存,像這樣每個字段的值:

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"> 
    <ItemTemplate> 
    <div class="user"> 
      <asp:Label ID="ActiveLabel" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Name")%>'></asp:Label> 
    </div> 
    </ItemTemplate> 
</asp:Repeater> 

然後在你的ItemDataBound事件,你可以找到的控制,並設置其價值根據需要。

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 

    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
      Label activeLabel = (Label)e.Item.FindControl("ActiveLabel"); 

      //Format label text as required 
    } 
} 

使用選項2會要求您創建一個服務器端的公共訪問的方法,你可以調用像這樣:

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"> 
    <ItemTemplate> 
    <div class="user"> 
    Active: <%# FormatActive((string)DataBinder.Eval(Container, "DataItem.Active")) %> 
    </div> 
    </ItemTemplate> 
</asp:Repeater> 

然後定義像這樣的方法:

public string FormatActive(string input) 
{ 
    //Format as required 
    //Return formatted string 
} 
+2

FormatActive()不需要公開,只保護。 – jrummell

+2

+1包括詳細的兩個選項。 – samandmoore

1
<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"> 
    <ItemTemplate> 
    <div class="user"> 
     Active: <asp:label id="lblActive" Text='<%# DataBinder.Eval(Container, "DataItem.Active")%>' runat="server" />   
    </div> 
    </ItemTemplate> 
</asp:Repeater> 


protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     //Do modifications here 
     YourObjectName person = (YourObjectName)e.Item.DataItem; 
     //you can now ref the object this row is bound to 
     //example find a dom element 
     Label lblActive= (Label)e.Item.FindControl("lblActive"); 

     if(person.Active == 2) 
     { 
      lblActive.Text = "This is great"; 
     } 

    } 
} 
+0

爲什麼將text屬性設置爲'<%#DataBinder.Eval(Container,「DataItem.Active」)%>'如果您要將其設置在代碼背後? – samandmoore

+0

誰知道,不知道用例是什麼,只顯示OP如何訪問數據和更改表單元素。 –

+0

gotcha,繼續:) – samandmoore

2

我喜歡創建格式方法調用的標記,而不是處理的ItemDataBound。

protected static FormatActive(int active) 
{ 
    return "Formated Active String..."; 
} 

protected static FormatStatus(int status) 
{ 
    return "Formated StatusString..."; 
} 
0

你可以這樣做:

<%# (int)DataBinder.Eval(Container, "DataItem.Active") == 0 ? "Active" : "Inactive" %> 
0

不需要使用itemdatabound。只需在itemtemplate中添加一個方法,以dataitem.active as參數進行轉換即可。添加一個標籤,並執行以下操作:

Text='<%# String.Format("{0}",Conversion(Eval("dataitem.active")))%>' 

轉換然後是您在代碼後面或實用程序類中進行轉換的方法。