1

ページにグリッドビューを備えたASP.NET3.5アプリケーションがあります。

列の1つを日時としてフォーマットしたいと思います。私はもう試した:

<asp:BoundField DataField="StatusDate" HeaderText="as of" SortExpression="StatusDate" DataFormatString="{0:d}" />

問題は、私が何をしても、フォーマットが変更されることはありません。他の日付フォーマット文字列(general、sortable、longdate、リストは続きます)を試しましたが、この列のフォーマットは変更されません。

私は何も悪いことをしているとは思いませんが、この列に基づいて並べ替えようとすると、これは私をイライラさせます。デフォルトでは列を文字列としてフォーマットしているため、列ヘッダーで並べ替えると正しく並べ替えられません。

誰かがこれを見て、何らかの回避策がありますか?カスタムの並べ替え方法の追加について言及している記事を見たことがありますが、可能であれば、すぐに使用できる機能に固執しようとしています。

4

4 に答える 4

2

私は実際にこの問題を数回経験しており、次の解決策を考え出しました。まず、ストレージ用にすべてのデータを DataTable に配置します。

次に、特に何かをフォーマットする必要がある列のデータ型も暗黙的に定義します。

    DataTable table = new DataTable();
    table.Columns.Add("decimalNumber").DataType = System.Type.GetType("System.Decimal");
    table.Columns.Add("date").DataType = System.Type.GetType("System.DateTime");

次に、GridView で呼び出すと

    <asp:BoundField DataField="decimalNumber" DataFormatString="{0:C}" />
    <asp:BoundField DataField="date" DataFormatString="{0:dd/MM/yyyy}" />

結果は $0.00 & 19/11/2014のようになります。これが役立つことを願っています。

于 2014-11-19T19:01:23.770 に答える
0

文字列から日時としてフォーマットすることはできません。

ただし、次のアプローチを使用できます。出力は基本的に BoundField を使用した場合と同じです。

<asp:TemplateField HeaderText="as of" SortExpression="StatusDate">
   <ItemTemplate>
      <asp:Literal ID="Literal1" runat="server" 
        Text='<%# string.Format("{0:d}",  Convert.ToDateTime(Eval("StatusDate"))) %>'>        
      </asp:Literal>
   </ItemTemplate>
</asp:TemplateField>
于 2013-03-04T17:55:19.483 に答える
0

その列のソースのデータ型が datetime ではないためです。

于 2016-05-18T11:39:01.110 に答える