![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?e8efa67)
いくつか同じ質問は見受けられましたが、自分の環境ではどれも解決に至っていなく困っていますので、質問させてください。
DataGridViewのDataSourceにDataTableを設定して使っています。
このDataGridViewは、編集もできソートもできます。ただ、ソートは、ヘッダをクリックした時など、ユーザーが意図したときだけ起きて欲しく、例えばソート列の値を編集したときなどに、勝手に位置が変わってしまします。
これを、止める方法はないのでしょうか。しかも、それまでに任意のソートを繰り返した後の、編集を加える直前の順番を保ったままです。
ソートを解除するという方法がありましたが、ユーザーが編集直前までに整えた順番をクリアして、最初の状態に戻してしまいます。それでは、都合が悪いのです。
本当に困り果てています。どうか、分かる方教えていただけませんか?
No.3ベストアンサー
- 回答日時:
#1です。
#2の補足
#2ですが 支店でーソート(昇順)で 入力後、他の行をクリックしたら ソートされるようです。
編集直後ではなく あくまで 他の行にクリックした場合です。
これは 仕様のように思えます。
もし、このことをおっしゃっているのであれば ソート後で データを検索し、カーソル位置(行位置)
をもとに戻すしかないとは思いますが。
この回答への補足
当然、セルの値を編集し、別のセルに移るなどして値がコミットされた瞬間です。編集中は、セル上に表示された編集用コントロールの上で表示が書き換えられているだけですので、まだソートは起こりませんよね。
もちろん、それが確定されコミットされた時の話です。
同じ現象を分かっていただけたようですね。
そして、それが標準仕様であることももちろん分かっています。
それを承知の上で、なんとか解決策を模索していたわけです。
だって、普通に考えて、迷惑な挙動だと思いませんか? 閲覧専用のリストとして使う分には、全く問題ないですが、編集もできるリストで勝手にソートされては、編集しづらいですよね?
なので、仕方なく編集直前のソート位置を記憶する隠し列を作って対応しました。目的の動作はするようになりましたが、もっとスマートな根本解決に近い方法を探している途中です。
No.4
- 回答日時:
この回答への補足
サイト情報ありがとうございます。
すみませんが、そのサイト内の、どの記事でしょうか?
IDか検索キーワードを教えていただけると助かります。
おねがいします。
No.2
- 回答日時:
>>3行目の103のセルを編集して107に変更したとたんに、勝手にソートされその行は5行目に移動してしま>>い、リストは、上から順番に 101,102,104,105,107となってしまいます。
これは質問者さまの プログラムにそのようになるコードが実装されているからと推測します。
ためしに以下のデータをサンプル(マイクロソフト NorthWindow DB)から作ってみました
===========================================================================
販売コード支店販売日商品個数売上
1池袋2009/10/05 13:54:30オレンジジュース5\1,250
2上野2009/10/05 0:20:11コーヒー10\1,800
3上野2009/10/05 1:05:18グレープジュース10\2,500
4上野2009/10/05 8:57:54紅茶10\1,800
5新宿2009/10/05 22:47:22オレンジジュース7\1,750
6上野2009/10/05 1:17:03グレープジュース6\1,500
7渋谷2009/10/05 14:56:41コーヒー4\720
8渋谷2009/10/05 19:54:55紅茶7\1,260
9品川2009/10/05 21:51:47オレンジジュース8\2,000
10品川2009/10/05 5:51:16グレープジュース3\750
11上野2009/10/06 0:22:37グレープジュース3\750
12新宿2009/10/06 19:10:24オレンジジュース2\500
===========================================================================
このデータを Test.MDB に 「売り上げ」 とういうテーブルを作成します。
VB.NET 2005 にて 新しいプロジェクトを作成
Windows フォーム Form1 上に メニューからデータ/新しいデータ接続 を実行し
先に作成した MDB に接続してください。
データーソースのウインドウより テーブル「売り上げ」をForm1 上に
ドラッグ&ドロップすると 自動的にデータグリッドの配置がされます。
まずはこれで 実験してください。
これで デフォルトでは販売コード で表示されている状態で 支店を昇順になるようにヘッダー
をクリックしてソートしたとしましょう
たとえば 販売コード 8番 のデータの 支店が 渋谷 → 池袋 に変えてみてください。
ソートは起こりません。 もう一度 ヘッダーの支店をクリックするとソートします。
===========================================================================
ということでので 実装している コードに問題があるように思えます。
No.1
- 回答日時:
もう少し、話を整理することが必要です。
>>、ヘッダをクリックした時など、ユーザーが意図したときだけ起きて欲しく、例えばソート列の値を編集したときなどに、勝手に位置が変わってしまします。
つまりカーソル位置が、何処にあれば正解なのでしょうか?
ソートすればデータの位置は変わるのはあたりまえなのでは。
編集終了時のデータ たとえば伝票番号順で 編集していたとき その列に含まれる 氏名(かな)などの列をクリックしたとしましょう。(この場合は氏名(かな)でソートされます。)
当然、伝票番号の順番ではなくなりますよね 元の位置は、ぜんぜん違う場所になってしまうかもしれません。
こういう場合は、どうするのでしょうか?
このように やりたいことを明瞭かつ簡単に 箇条書きで書いてください。
何が困っているのかが第3者にはつたわりません。
具体的にお願いします。現状の状態から あるアクションがあったらこうしたい。
など、データのサンプル などを提示してください。
データグリッドビューは 列ごとにソートの可否を決定できます。
ソート後にもとの行位置に戻したい場合は 検索すれば もとの位置に戻すことは可能です。
どの列が固定し、どの列が クリックしたら ソートし、編集行のもとの行位置に戻すのか 明確にしてください。
この回答への補足
「ソート列の値を編集したとき」この表現が分かりにくかったのでしょうか?すみません。
例えば、もともとは、データベースのID順など、目的とは違う別の列でソートされていたリストに対して、伝票番号の編集をするため、DataGridViewのヘッダをクリックして、分かりやすいように、伝票番号の列で昇順にソートし直したとします。
その状態で、具体的には伝票番号の列の1行目から5行目には、101,102,103,104,105という値が入っているとします。
3行目の103のセルを編集して107に変更したとたんに、勝手にソートされその行は5行目に移動してしまい、リストは、上から順番に 101,102,104,105,107となってしまいます。
ユーザからすると、107に変えたはずの3行目にカーソルがあるままなのに、そこにはソートされて順番が変わった元4行目の104が来ている、ということになり、編集中に行が変わってしまっては、作業がやりづらいことになります。
編集を終え、ユーザーが意図的にもう一度ソートをするまでは、101,102,107,104,105の順番でいて欲しい・・・。
という意味でした。
エクセル上で、範囲を指定してデータの並べ替えをするのと同じ感覚て、ユーザが「ソート」の操作をしたときだけ並べ替えが起こって、それ以外の時、具体的には、リスト内のデータを編集しているときには勝手に順番が変わらないようにしたいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でアナグラムを求めるプロ...
-
Fortran77で多次元配列を並び替...
-
列のどこをクリックしてもソー...
-
10個の整数を入力して小さい順...
-
DataGridViewで選択行が変わる...
-
C言語でファイルの中身をソー...
-
Excel2010 /VBA ユーザー設定リ...
-
選択された範囲の中からx番目に...
-
スプレッドでのソート
-
VB.NETでファイル名順にファイ...
-
C++ 入力した3つのint型の整数...
-
c言語プログラミング 等差数列...
-
関数から配列を返すには?
-
C言語 配列の長さの上限
-
配列の要素数に変数を入れたい...
-
参照型で受け取った引数をポイ...
-
構造体のextern方法
-
文字列の途中から途中までを抽出
-
ビットをローテートするプログ...
-
init関数の意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
あるディレクトリ内のファイル...
-
VBA基本構文の作り方 2列の...
-
ファイル名「1.jpg ~10.jpg~...
-
Excelですべての組合せ(重複組...
-
vbでDataTableの抽出コピー
-
C# DataTableの行をソートしてD...
-
listboxの並び替え
-
(VBA) Dir 関数で取得するファ...
-
コレクションの数値をSortで並...
-
C言語・要素除去
-
Fortran77で多次元配列を並び替...
-
C# DataTable ソートについて
-
VBScriptで重複レコードを削除...
-
excel VBA の条件をつけての列...
-
文字列をソートする方法
-
n番目に大きい数を求めるアル...
-
C言語でアナグラムを求めるプロ...
おすすめ情報