• ベストアンサー

DataGridViewソート時に先頭行を固定する

C#のDataGridViewにて列名をクリックした際にソートが発生しますが、 その時、先頭行だけはソートの比較に参加させずに固定しておくことは可能ですか? よろしくお願いします。

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

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

Column[index].HeaderTextを設定する方法ではなくて、セルの一行目を除外するのですよね? http://dobon.net/vb/dotnet/datagridview/customsort.html 上記URLのSortCompareイベントを使用する方法が利用できると思います。 ソートの条件で2行目から判断するよう手動で書かなければなりませんが…。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridviewsortcompareeventargs.sortresult.aspx によれば、 e.RowIndex1が0の時は常にマイナスの値 e.SortResult2が0の時は常にプラスの値をe.SortResultプロパティに格納すれば、常に一行目を先頭にできると考えます。 それ以外の場合は通常通りのソート条件を実装します。

rigard1225
質問者

お礼

ご回答ありがとうございます。 リンク先にてSortCompareイベントについて確認したところ、 DataSourceプロパティに何も設定していないことが条件とのことでした。 しかし残念ながらDataSourceを設定していますので、この方法では出来そうにありません。 せっかく、ご回答いただいたのにすみません。 ただ、このような方法は知らなかったので勉強になりました。 今後参考にさせて頂きます。

関連するQ&A

  • DataGridViewのソートを止めたい

    いくつか同じ質問は見受けられましたが、自分の環境ではどれも解決に至っていなく困っていますので、質問させてください。 DataGridViewのDataSourceにDataTableを設定して使っています。 このDataGridViewは、編集もできソートもできます。ただ、ソートは、ヘッダをクリックした時など、ユーザーが意図したときだけ起きて欲しく、例えばソート列の値を編集したときなどに、勝手に位置が変わってしまします。 これを、止める方法はないのでしょうか。しかも、それまでに任意のソートを繰り返した後の、編集を加える直前の順番を保ったままです。 ソートを解除するという方法がありましたが、ユーザーが編集直前までに整えた順番をクリアして、最初の状態に戻してしまいます。それでは、都合が悪いのです。 本当に困り果てています。どうか、分かる方教えていただけませんか?

  • DataGridView の sort

    DataGridView の sort メソッドなどで特定の列のソートを指定していると時、セルの内容を編集するたびに勝手にソートが起こってしまいます。これを止める方法はありますか? できそうで出来ないのです。 つまり、どの列にもソートが設定されていない最初の状態にしたいのです。SortedColumnプロパティは、ReadOnlyで設定できず、sort メソッドの引数にNothingを入れることもできません。。。 いったいどうしたら解除できるのですか??? お願いします!!

  • DataGridView.Sortに入れる引き数

    C#を使用しています。 DataGridView.Sort(DataGridViewColumn, ListSortDirection) の命令をしたいのですが、 ListSortDirection引数に何を入れればいいのかわかりません。 数値(int)で降順にしたいのですが。

  • DataGridViewにて、ソート開始時に起こるイベントとは?

    VB.NETの質問です。 DataGridViewにて、ソート開始時にイベントを取得したいのですが、そのイベントが見つからず困っています。 ソート完了時ならば、「Sorted」イベントで可能なのですが、、 お分かりになる方がいらっしゃいましたが、ご教授宜しくお願いします。

  • DataGridViewでのソート制御

    はじめまして。 Winアプリを作成していますが、ネットで検索をかけても どうしても分からない事があるのでお教えいただけないでしょうか? 【環境】 Window XP VS2005 VB.net 【質問】 DataGridViewでソートを行う際にデータをNULL(Nothing)にした部分が ソートに反映されてしまうのですが、どうにかソートされないように する方法はありますでしょうか? 例: データ1 データ2 データ3 NULL NULL ソートを行うと NULL NULL データ1 データ2 データ3 希望値としては以下です。 データ1 データ2 データ3 NULL NULL もともとはDataGridViewのグリッドをデータ数に関わらず 常に表示したいことから、行き詰ったのですが どなたか良い方法をご存知ではないでしょうか? よろしくお願いいたします。

  • DataGridView のソート時のDatasorceの行位置について

    DataGridViewにDatatableをDatasourceとして設定しています。 画面でカラムタイトルをクリックして、データの並びを変更 した時に、DataGridViewのindexに応じたDatatableのindexを 知る方法を教えて下さい。(伴って変わらないのです) 画面のデータを修正すると、Datatableの値は連携して変わって います。

  • VB DataGridView 行削除

    Visualbasic 2010 を利用してWindowsFormアプリケーションを開発しております。 データベースはORACLE11を利用しております。 VB側よりOracleDataAdapterを利用してDatatableにORACLEのSELECT結果を格納しています。 DataGridViewには上記のDataTableをDataSourceとして割り当てております。 このDataGridViewに並び替え機能を組み込んでおります。 ※DataViewのSortを利用して並び替えを実現しております。 この後にDataGridViewの行削除を行うと以下の例外が発生します。 一意制約(XXX.PKY_テストデータ)に反しています Oracle.DataAccess.Client.OracleException これはDataTableをSortしたためOracleDataAdapterと一致しなくなったことが原因ではないかと推測しております。 DataGridViewの並び替えを行っても正常に行削除を行いDataTableにも反映する方法が分る方がいらっしゃいましたらご教授頂けないでしょうか。 VBソース抜粋 ・データ抽出 '/ SQLをOracleで実行した結果をデータアダプタに格納 Dadp5 = New OracleDataAdapter("SELECT * from テストデータ", CONFIG.Database) Dadp5.Fill(dt_test) Me.DataGridView_TEST.DataSource = dt_test ・並び替え(降順) Dim dv = New DataView(dt_test) dv.Sort = "テストコード DESC" dt_test = dv.ToTable Me.H_DataGridView_test.DataSource = dt_test ・行削除 Dim scBuilder As New OracleCommandBuilder(Dadp5) '/ データグリッドビューの編集内容をデータベースへ反映 '/ 生成されたSQLを実行する Dadp5.Update(dt_test) ※ここで例外が発生致します。 お手数おかけ致しますが宜しくお願い致します。 以上です。

  • DataGridViewのカーソル

    VB 2005を使っています。 DataGridViewを初期化した際に、ディフォルト状態ではカーソルが先頭行の 先頭カラムに移動します。 またその背景色が青っぽい色となっています。 ここで希望なんですが、カーソルは先頭行、先頭カラムに移動しても構わない のですが、背景色を白っぽい色にしたいのです。 つまり、カーソルがあろうとなかろうと、各行、セルを同一色にしたいのです。 いろいろ調べてみましたが、やりかたがわかりませんでした。 ご存じの方はよろしくアドバイスお願いいたします。

  • DataGridViewがクラッシュする

    VB2005を使用しています。 DataGridViewコントロールで、以下のようなコードを実行した際に、 DataGridViewコントロール自体が大きな赤い×の表示になることがあります。 (必ず発生するわけではありません。) 'クリア DataGridView1.Columns.Clear() 'DataSetをDataGridViewに格納 DataGridView1.DataSource = dtData '空の列を追加する DataGridView1.Columns.Add("NOP", "") '最終列の幅をFillにする DataGridView1.Columns("NOP").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill '編集不可にする For i = 0 To DataGridView1.Columns.Count - 1 DataGridView1.Columns(i).ReadOnly = True Next i '行幅は変更できないようにする DataGridView1.AllowUserToResizeRows = False '行Headerを非表示にする DataGridView1.RowHeadersVisible = False 'セルの選択方法は行毎にする DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect '1行のみ選択にする DataGridView1.MultiSelect = False '追加行は表示しない DataGridView1.AllowUserToAddRows = False '列幅を自動リサイズさせる DataGridView1.AutoResizeColumns() 'DataGridViewのフォントサイズを変更する DataGridView1.Font = New Font(DataGridView1.Font.Name, 11) '行高さを自動リサイズさせる DataGridView1.AutoResizeRows() 'Headerのアライメントを中央にする DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 同時に、次のメッセージボックスが表示されます。 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。 [続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。 [終了]をクリックすると、アプリケーションは直ちに終了します。 オブジェクト参照がオブジェクトインスタンスに設定されていません。」 どうすればこのような現象を回避することができるのでしょうか? どうかご教授ください。

  • エクセル 並び替えの時複数行を固定することは出来ますでしょうか?

    こんにちは エクセルでデータの並び替えを行う際、複数の行を固定することは可能でしょうか。 先頭行は固定できるのですが。。。 御存知の方お手数ではございますがお教えいただけませんでしょうか。 よろしくお願いいたします。

専門家に質問してみよう