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メソッドはどこで記述しますか?コードビハインドページで試してみましたが、実行時エラーが発生しましたか?これが不可能な場合、インラインフォーマットを行う方法はありますか?
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>
インターネットでいくつか検索した後、実際には非常に可能です 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>
これは、式と文字列形式を受け取るテンプレートコントロール「Eval」です。
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")%>
Text = '<%#DateTime.Parse(Eval( "LastLoginDate")。ToString())。ToString( "MM/dd/yyyy hh:mm tt")%>'
これはあなたが望むフォーマットで動作します
ありがとうございます。私はしばらくの間、標準のフォーマット文字列にとらわれていました。また、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
Aspxページでこのように使用できます
<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
<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>