3

たとえば、バックエンドでは dataable をリピーターにバインドし、フロントエンドではリピーターを次のように設定しています。

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

したがって、「name」と「email」の出力は問題ありません。ただし、「アクティブ」と「ステータス」は、私が持っている参照テーブルに基づいて、より説明的な文字列に変更したい整数コードを出力します。

リピーターの「ItemDataBound」イベントでこれを行うことができると思いますが、次のステップがどうあるべきか、つまり、変更する必要がある2つのフィールドをチェックして変更することに行き詰まっています。

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

5 に答える 5

5

あなたはどちらかをすることができます

  1. ItemDataBoundイベントでフォーマットを処理します
  2. ページまたはWebUserControlクラスにパブリックメソッドを作成して、フォーマットを処理します。

オプション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
}
于 2011-11-03T13:04:03.503 に答える
2

ItemDataBoundを処理するよりも、マークアップで呼び出されるフォーマットメソッドを作成する方が好きです。

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

次に、背後にあるコードで:

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

protected static FormatStatus(int status)
{
    return "Formated StatusString...";
}
于 2011-11-03T13:03:02.013 に答える
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";
        }

    }
}
于 2011-11-03T13:01:15.597 に答える
0

あなたは次のようなことをすることができます:

<%# (int)DataBinder.Eval(Container, "DataItem.Active") == 0 ? "Active" : "Inactive" %>
于 2011-11-03T13:09:16.723 に答える
0

itemdatabound を使用する必要はありません。itemtemplate にメソッドを追加して、dataitem.active をパラメーターとして変換するだけです。ラベルを追加して、次の操作を行います。

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

変換は、コードビハインドまたは変換を行うユーティリティクラスに残すメソッドです。

于 2011-11-03T13:18:13.290 に答える