30

ASPX ページの DataBinder.Eval ステートメントからのデータをフォーマットするにはどうすればよいですか?

例えば、ニュース記事の掲載日を特定の形式でホームページに表示したい。ASP.NET 2.0 Repeater コントロールを使用して、ニュース項目のリストを表示しています。

このコードは次のようになります。

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
<HeaderTemplate><table cellpadding="0" cellspacing="0" width="255"></HeaderTemplate>
<ItemTemplate>
    <tr><td >
            <a href='/content/latestNews.aspx?id=<%#DataBinder.Eval(Container.DataItem, "id") %>'>
                <asp:Label ID="lblNewsTitle" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "title") %>'></asp:Label>
            </a>
    </td></tr>
    <tr><td>
           <asp:Label ID="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate"))%>'></asp:Label>
    </td></tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate></asp:Repeater>

パラメータとして DataBinder.Eval 値を使用してカスタム メソッドを呼び出す方法はありますか (以下のようなもの)。

<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")) )%>'></asp:Label>

はいの場合、どこに GetDateInHomepageFormat メソッドを記述すればよいですか? コード ビハインド ページで試してみましたが、実行時エラーが発生しましたか? これが不可能な場合、インライン フォーマットを行う方法はありますか?

4

10 に答える 10

59

フォーマットを提供する DataBinder.Eval のオプションのオーバーロードがあります。

<%# DataBinder.Eval(Container.DataItem, "expression"[, "format"]) %>

format パラメーターは、次のような値のプレースホルダー置換構文 (複合書式設定と呼ばれる) を使用する文字列値です。

<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label>
于 2008-11-08T21:17:52.827 に答える
14

インターネットで検索した結果、実際には、DataBinder.Eval 値を渡すカスタム メソッドを呼び出す可能性が非常に高いことがわかりました。

カスタム メソッドはコード ビハインド ファイルに記述できますが、publicまたはprotectedと宣言する必要があります。上記の質問で、コード ビハインドにカスタム メソッドを記述しようとしたが、実行時エラーが発生したと述べました。その理由は、メソッドがprivateであると宣言したためです。

したがって、要約すると、以下は DataBinder.Eval 値を使用して目的の出力を取得する良い方法です。

default.aspx

<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")) )%>'></asp:Label>

default.aspx.cs コード:

public partial class _Default : System.Web.UI.Page
{

    protected string GetDateInHomepageFormat(DateTime d)
    {

        string retValue = "";

        // Do all processing required and return value

        return retValue;
    }
}

これが他の人にも役立つことを願っています。

于 2008-11-09T11:05:27.663 に答える
12

単純な構文を使用しないのはなぜですか?

<asp:Label id="lblNewsDate" runat="server" Text='<%# Eval("publishedDate", "{0:dddd d MMMM}") %>'</label>

これは、式と文字列形式を受け取るテンプレート コントロール「Eval」です。

protected internal string Eval(
string expression,
string format

)

http://msdn.microsoft.com/en-us/library/3d2sz789.aspx

于 2011-05-17T05:57:35.100 に答える
11

あなたが言ったように関数をリピーターに使用できますが、DataBinder.Eval がオブジェクトを返し、それを DateTime にキャストする必要があることに注意してください。

フィールドをインラインでフォーマットすることもできます。

<%# ((DateTime)DataBinder.Eval(Container.DataItem,"publishedDate")).ToString("yyyy-MMM-dd") %>

ASP.NET 2.0 以降を使用している場合は、次のように記述できます。

<%# ((DateTime)Eval("publishedDate")).ToString("yyyy-MMM-dd") %>

もう 1 つのオプションは、OnItemDataBound イベントで値をラベルにバインドすることです。

于 2008-11-08T22:38:56.830 に答える
3

この行は私の問題を解決しました:

<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%>
于 2009-07-31T09:15:10.223 に答える
2

ローカル日付形式を使用して日付をフォーマットするには、次を使用します。

<%#((DateTime)Eval("ExpDate")).ToString("d")%>

日付ロケールを使用して日付を表示するように Eval ステートメントをフォーマットする方法

于 2011-10-04T16:56:20.550 に答える
1

ありがとうございます。私はしばらくの間、標準のフォーマット文字列に固執していました。また、VB でカスタム関数を使用しました。

マークアップ:-

<asp:Label ID="Label3" runat="server" text='<%# Formatlabel(DataBinder.Eval(Container.DataItem, "psWages1D")) %>'/>

コードビハインド:-

Public Function fLabel(ByVal tval) As String
   fLabel = tval.ToString("#,##0.00%;(#,##0.00%);Zero")
End Function
于 2011-10-14T01:08:15.390 に答える
0
<asp:Label ID="ServiceBeginDate" runat="server" Text='<%# (DataBinder.Eval(Container.DataItem, "ServiceBeginDate", "{0:yyyy}") == "0001") ? "" : DataBinder.Eval(Container.DataItem, "ServiceBeginDate", "{0:MM/dd/yyyy}") %>'>
</asp:Label>
于 2009-09-17T14:07:19.450 に答える
0

このようにaspxページで使用できます

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
于 2009-10-22T05:48:12.723 に答える