ASP.NET 2.0(C#) GridViewのソート機能をデフォルトで降順にしたい

このQ&Aのポイント
  • ASP.NET 2.0(C#) GridViewのソート機能をデフォルトで降順にする方法を解説します
  • GridViewコントロールで特定のフィールドだけを降順にソートする方法について説明します
  • C#を使用してASP.NET 2.0のGridViewでデフォルトで降順にソートする方法を紹介します
回答を見る
  • ベストアンサー

ASP.NET 2.0(C#) GridViewのソート機能をデフォルトで降順にしたい

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; } } などとしてみたのですが、これでは常に降順になってしまいます。 よろしくお願いします。

noname#44908
noname#44908

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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;   } といった具合でどうでしょう # 字下げは全角スペースです

noname#44908
質問者

お礼

redfox63さん、回答ありがとうございます。 初期状態をどうやって取得するか苦労していたのですが、 DataGridViewのSortDirectionプロパティを保持しておけば良かったんですね。 おかげさまで出来ました。 ありがとうございました。またよろしくお願いします。

関連するQ&A

  • vb.netにてgridviewのソート

    vb.netにてgridviewのソートについてアドバイスをお願いいたします。 webページにてgridviewを使用しDBの内容を表示しております。 gridviewにテンプレートフィールドとしてチェックボックスを追加し、すでに登録されている(別DB内に格納)しているものにはチェックをつけております。 現在、マスタとなるDBから読み込んだ並びで表示されているところを チェックボックスがTRUEの行を昇順にて表示させることは可能でしょうか?

  • ASP.Net GridView Select

    大変お世話になっております。 GridView のテンプレートにボタンを2つ配置しております。 A と B どちらのボタンのCommandName にも Select を記述して 選択された行のあるフィールドの値を取得したいのですが、 GridView1_SelectedIndexChanging で、e.NewSelectedIndex を使い該当セルを見つけることはできるのですが、AとBのボタンそれぞれで違うことをしたいのです。 イメージ的にいいますと     If CommnadButton.Name = "A" then         Aでやりたいこと     else If CommandButton.Name = "B" then         Bでやりたちこと     end if CommnadButton.Name なんてメソッドもプロパティも存在しないものですが、 SelectedIndexChanging イベントの中で どのボタンが押されてこのイベントが実行されるのかが、わかる方法がございましたら、ぜひご教授いただけますと大変助かる次第でございます。 何卒よろしくお願い申し上げます。

  • 【ActionScript】配列の昇順降順混合の複合ソートはできますか?

    FLASH8(Win-XP)使用者です。 配列の複合ソートを昇順降順おりまぜてしたいのですが可能でしょうか? 下記のスクリプトですと、高さも幅も降順になります。 しかし実際には高さは降順、幅は昇順にしたいのです。 myArray = new Array; myArray.push({takasa:"20", haba:"40"}); myArray.push({takasa:"20", haba:"20"}); myArray.push({takasa:"40", haba:"10"}); myArray.push({takasa:"20", haba:"15"}); myArray.push({takasa:"40", haba:"20"}); myArray.push({takasa:"40", haba:"15"}); myArray.sortOn(["takasa","haba"],Array.DESCENDING); for(i=0; i<myArray.length; i++){ trace("高="+myArray[i].takasa + " 幅=" + myArray[i].haba); } <結果> 高=40 幅=20 高=40 幅=15 高=40 幅=10 高=20 幅=40 高=20 幅=20 高=20 幅=15 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • VB2005 符号を踏まえた降順ソートについて

    いつもお世話になっております。 私はVB2005入門者です。 hoge.txtからカンマ0列目に"ABCD"且つ1行目に"T"がつく行の2,3,4列目を nfMov_x(),nfMov_y(),nfMov_z()に格納しソートを使って 配列内の数値を降順に並び替えて、最大値を求めたいのですが 絶対値に置き換え符号を無視した処理しか出来ませんでした。 ----hoge.txt---- ABCD,A1,10.5 ,8.3 , 9.5 ABCD,A2,11.5 ,7.3 , 6.5 ABCD,T1,42.5 ,-10.3 , 3.2 ABCD,T2,25.2 ,-220.2 , -1.2 ABCD,T3,-35.5 ,210.3 , -15.2 ---------------- 希望する取得値は下記の通りで、T3列210.3ではなくT2列-220.2のように ソート時、符号は無視するが最終的には符号を付けた数値を取得したいのです。 Tmov_x(0) = 42.5 Tmov_y(0) = -220.2 Tmov_z(0) = -15.2 下記をどのように変更すれば良いのかわからないので、どなたか アドバイスや添削をよろしくお願いします。 For n = 0 To 2 Dim reader As New System.IO.StreamReader("C:\hoge.txt", System.Text.Encoding.Default) Dim nfMov_x(), nfMov_y(), nfMov_z() As Single Do Until reader.EndOfStream line = reader.ReadLine() field = line.Split(",") If field(0) = "ABCD" Then If field(1).Trim.Substring(0, 1) = "T" Then Do While field(4).Trim.Substring(0, 1) = "T" ReDim Preserve nfMov_x(T_cont), nfMov_y(T_cont), nfMov_z(T_cont) nfMov_x(T_cont) = field(2) nfMov_x(T_cont) = Math.Abs(nfMov_x(T_cont)) nfMov_y(T_cont) = field(3) nfMov_y(T_cont) = Math.Abs(nfMov_y(T_cont)) nfMov_z(T_cont) = field(4) nfMov_z(T_cont) = Math.Abs(nfMov_z(T_cont)) T_cont += 1 line = reader.ReadLine() field = line.Split(",") Loop ReDim Preserve nfMov_x(T_cont - 1), nfMov_y(T_cont - 1), nfMov_z(T_cont - 1), _ Tmov_x(cont), Tmov_y(cont), Tmov_z(cont) Array.Sort(nfMov_x) Array.Sort(nfMov_y) Array.Sort(nfMov_z) Array.Reverse(nfMov_x) Array.Reverse(nfMov_y) Array.Reverse(nfMov_z) Tmov_x(cont) = nfMov_x(0) Tmov_y(cont) = nfMov_y(0) Tmov_z(cont) = nfMov_z(0) cont += 1 T_cont = 0 ReDim nfMov_x(T_cont), nfMov_y(T_cont), nfMov_z(T_cont) Exit Do End If End If Loop reader.Close() Next

  • C#でマウスホイール + Ctrlキーを使った機能

    C#でアプリケーションを作っています。 マウスホイール + Ctrlキーを使った機能を作りたいと思っています。 マウスホイールは、 private void GraphBrowser_MouseWheel(object sender, MouseEventArgs e) { if ((e.Delta / 120) > 0)//上向きに回転される { } } といった感じです。 Ctrlキーは、 private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == e.Control) { } } といった感じです。 各々、別々の単独の処理は、分かるのですが、 マウスホイール + Ctrlキーとなると分からなくなりました。 指導よろしくお願いいたします。

  • GridViewのButtonフィールドの使い方

    環境:visual web develper 2008 Express Edition GridViewタスク→列の編集→フィールド→「使用できるフィールド」からButtonFieldを選択→Button Typeを「Button」に設定、Textは「削除」→「OK」を押す 以上の流れで削除ボタンの列がGridView内に表示されますが、「削除ボタン」を押しても何も起こりません。 削除ボタンをクリックされたときにこちらが決めた処理を行わせるにはどうすればよいでしょうか? ツールボックスのButtonですと、 Protected Sub sakujyo_Click(ByVal sender As Object, ByVal e As EventArgs) Handles bookNameSyoujyun.Click    End Sub でボタン(sakujyoボタン)を押したときの処理がかけますが、このような書き方はできないのでしょうか? 現状だとGridView内にあるボタンのIDがわからないため、○○○_Clickの○の部分に何を書けばいいのかわかりません。 ご助言よろしくお願いいたします。。

  • GridViewのEditTemplate

    すみません。改めて質問させていただきます。 GridViewのEditTemplateにDropDownListが配置されています。 更新したときに、そのDropDownListの値を取得する方法をご教授頂きたいです。 言語はVBです。以下のコードを書きましたが取得できません(Updatingイベントのとき)↓ Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating MsgBox(GridView1.Rows(e.RowIndex).ToString) End Sub とりあえずメッセージボックスにドロップダウンリストの値を表示したいです。

  • 他のユーザーが同じデータに対して同時に変更を試みて

    アクセスのテーブルで日付フィールドで昇順の並べ替えをする時は何も起こらないのに 降順の並べ替えをすると 「他のユーザーが同じデータに対して同時に変更を試みているので、プロセスが停止しました」 と言うエラーが発生します。 でも問題なく昇順に並べ替えが出来ます。 それに、このファイルを使っているのは私だけだし、他のファイルからテーブルリンク等はしていません。 実際に、 他のユーザーが同じデータに対して同時に変更を試みているのであれば なぜ昇順に並べ替えをしたときはエラーにならないのでしょうか? アクセス2010です。

  • ピボットテーブルを複数項目でソートしたい

    ピボットテーブルに展開したデータを、表示している複数の行項目 によりソートすることは可能でしょうか? 行項目として以下が設定されており、  1.科目  2.仕入先  3.購入種類 列項目としては  4.仕入月 データとしては  5.仕入金額 並べ替え変えたい順序としては、 科目毎の年間仕入金額が多い順の購入種類昇順としたいので、 以下のように設定したいのですが、 ピボットテーブル フィールド詳細オプションでは 1項目しかソート順に指定することができません。  1.科目昇順⇒5.合計/仕入金額降順⇒3.購入種類昇順 上記のようなソートを行う方法はありますでしょうか?

  • ソート Comparator

    Integer型の変数num(10,4,8,6,9,5)をそれぞれ含むオブジェクト配列aryがあり、それをソートするため Arrays.sort(arry,sortLogic); とした場合、 Comparatorインターフェースを実装したクラスsortLogic内のメソッドで public int compare(Object object1, Object object2) {   return ((ary)object1).compareTo(((ary)object2).num); } とすると、昇順にソート(修正ソートマージ)、また、 return ((ary)object1).compareTo(((ary)object2).num); とすると降順にソートされるみたいなのですが、どのような手順(アルゴリズム)でソートされるのでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう