dポイントプレゼントキャンペーン実施中!

GridViewコントロールで「並べ替えを有効」にすると、各フィールドごとに、ヘッダーのリンクをクリックするたびに昇順→降順でソートできるようになりますが、これをあるフィールドだけ、降順→昇順にすることはできないでしょうか?

GridView1のSortingイベントで

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//hogeフィールドだけデフォルトで降順にしたい
if (e.SortExpression == "hoge")
{
if (e.SortDirection == SortDirection.Ascending)
e.SortDirection = SortDirection.Descending;
else
e.SortDirection = SortDirection.Ascending;
}
}

などとしてみたのですが、これでは常に降順になってしまいます。

よろしくお願いします。

A 回答 (1件)

たぶん DataGridViewのSortDirectionプロパティを参照して


GridViewSortEventArgsを組み立てているのだろうと思います

Sessionなどでそのソートを制御したい列のSortDirectionを保存しておかないといけないように思います

GridViewのDataBoundイベントで初期状態を保存します
  if ( Session["mySort"] == null )
  {
    Session["mySort"] = GridView1.SortDirection;
  }

Sortingイベントで
  // 判定用の変数に現在の状態を取り込む
  SortDirection mySort = (SortDirection)Session["mySort"];
  if ( e.SortExpression == "hoge" )
  {
    if ( mySort == SortDirection.Ascending )
    {
      mySort = SortDirection.Descending;
    }
    else
    {
      mySort = SortDirection.Ascending;
    }
    e.SortDirection = mySort;
    // 次回用にセッションに保存
    Session["mySort"] = mySort;
  }

といった具合でどうでしょう
# 字下げは全角スペースです
    • good
    • 0
この回答へのお礼

redfox63さん、回答ありがとうございます。

初期状態をどうやって取得するか苦労していたのですが、 DataGridViewのSortDirectionプロパティを保持しておけば良かったんですね。
おかげさまで出来ました。

ありがとうございました。またよろしくお願いします。

お礼日時:2007/07/20 10:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!