web-dev-qa-db-ja.com

DataBinder.Evalデータのフォーマット

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メソッドはどこで記述しますか?コードビハインドページで試してみましたが、実行時エラーが発生しましたか?これが不可能な場合、インラインフォーマットを行う方法はありますか?

29
Nahom Tijnam

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

インターネットでいくつか検索した後、実際には非常に可能です 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;
    }
}

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

14
Nahom Tijnam

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

<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

12
Diego C.

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

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

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

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

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

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

11
dexter

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

<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%>
3
Wahab

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

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

日付ロケールを使用して日付を表示するために評価ステートメントをフォーマットする方法

2
GMG

Text = '<%#DateTime.Parse(Eval( "LastLoginDate")。ToString())。ToString( "MM/dd/yyyy hh:mm tt")%>'

これはあなたが望むフォーマットで動作します

1
Devendra Patel

ありがとうございます。私はしばらくの間、標準のフォーマット文字列にとらわれていました。また、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
1
gaz

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

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
0
santosh kumar
<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>
0
jojy