DataBinder.Eval データのフォーマット
-
07-07-2019 - |
質問
ASPX ページの DataBinder.Eval ステートメントからのデータをフォーマットするにはどうすればよいですか?
たとえば、ニュース項目の発行日を特定の形式でホームページに表示したいとします。ASP.NET 2.0 Replyer コントロールを使用してニュース項目のリストを表示しています。
このコードは次のようになります。
<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 メソッドをどこに記述すればよいですか?コードビハインドページで試してみましたが、実行時エラーが発生しましたか?それが不可能な場合、インラインフォーマットを行う方法はありますか?
解決
DataBinder.Eval には、書式設定を提供するためのオプションのオーバーロードがあります。
<%# DataBinder.Eval(Container.DataItem, "expression"[, "format"]) %>
format パラメーターは String 値で、次のような値のプレースホルダー置換構文 (複合書式設定と呼ばれます) を使用します。
<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label>
他のヒント
インターネットでいくつか検索した後、 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;
}
}
これが他の人にも役立つことを願っています。
より単純な構文を使用しない理由
<asp:Label id="lblNewsDate" runat="server" Text='<%# Eval("publishedDate", "{0:dddd d MMMM}") %>'</label>
これはテンプレートコントロールです<!> quot; Eval <!> quot;式と文字列形式を取ります:
protected internal string Eval(
string expression,
string format
)
前述のようにリピーターに関数を使用できますが、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イベントでラベルに値をバインドすることです。
この行は私の問題を解決しました:
<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%>
ローカル日付形式を使用して日付をフォーマットするには、次を使用します。
<%#((DateTime)Eval("ExpDate")).ToString("d")%>
すべてに感謝します。しばらくの間、標準のフォーマット文字列にとらわれていました。また、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
Text = '<!> lt;%#DateTime.Parse(Eval(<!> quot; LastLoginDate <!> quot;)。ToString())。ToString(<!> quot; MM / dd / yyyy hh :mm tt <!> quot;)%<!> gt; '
これは希望する形式で動作します
<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>
aspxページでこのように使用できます
<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>