私はグリッドビューを持っていAllowSorting="True"
ますが、日付でソートできるように、1 つの列だけをカスタムソートしたいと考えています。
現在、これは文字列としてソートされているため、ソートが正しくありません。
データは SQL DB から取得されます。日付列だけを SQL ソートする方法はありますか?
カスタムソートSort Expression
については、aspxページで定義する必要があり、続いて.cs
ページでプロパティを定義して、ASC/DESCなどの現在の選択を保持し、OnSorting
イベントでコーディングを行う必要があります。コードを1つずつ入れていきます。
ASPXコード。
<asp:TemplateField HeaderText="DateTest" SortExpression="DateTest">
.CS コード。
現在の選択を保持する列挙型を定義します
/// <summary>
/// Sort grid header.
/// </summary>
enum enmSortHeader
{
Asc = 0,
Desc = 1
}
現在の選択を保持するプロパティを定義します。
private enmSortHeader SortDateTest
{
get
{
if (ViewState["DateTest"] == null)
return enmSortHeader.Asc;
return
(enmSortHeader)ViewState["DateTest"];
}
set
{
ViewState["DateTest"] = value;
}
}
ソートイベントについて。
protected void gvDetails_OnSorting(object sender, GridViewSortEventArgs e)
{
if (e.SortExpression == "DateTest")
{
if (SortDateTest== enmSortHeader.Asc)
{
var sorted = from m in SessionClass.BindDetailsGrid orderby m.Date ascending select m;
SessionClass.BindThoughtDetailsGrid = sorted.ToList();
SortTheme = enmSortHeader.Desc;
}
else
{
var sorted = from m in SessionClass.BindThoughtDetailsGrid orderby m.Date descending select m;
SessionClass.BindDetailsGrid = sorted.ToList();
SortTheme = enmSortHeader.Asc;
}
}
}
お役に立てば幸いです。
@Anujの回答を修正したいだけです。これは私にとってはうまくいきます。オブジェクトの定義ではDataTable
、次のように、列を追加するときにオブジェクトのタイプを指定する必要があります。
DataTable dataTable = new DataTable("Log");
dataTable.Columns.Add("Start", typeof(DateTime));
dataTable.Columns.Add("End", typeof (DateTime));
そして、ASP ページのコード ビハインドで、これを使用します。
private string SortField
{
get { return (string) ViewState["SortPropertyName"]; }
set { ViewState["SortPropertyName"] = value; }
}
private string SortDirection
{
get { return (string) ViewState["SortDirection"]; }
set { ViewState["SortDirection"] = value; }
}
そして、SortCommand メソッドで:
if (SortField.Equals(e_.SortExpression))
SortDirection = SortDirection == "asc" ? "desc" : "asc";
else
{
SortDirection = "asc";
SortField = e_.SortExpression;
}
並べ替えたいデータ列の並べ替え式プロパティに言及できます
例えば:SortExpression="Date"
ここで、日付は並べ替えたいデータ列の名前です
日付は文字列形式であるため、DateTime に変換する必要があります。その後、日付を並べ替えることができます。DataTable を使用してグリッド ビューをバインドしている場合は、最初にそれを DataTime に変換します。
dt.Columns.Add("DateTime", System.Type.GetType("System.DateTime"));