DBGirdのタイトルクリックに対応したエベントで、DataSet.SortまたはClientDataSet1のインデックスでデータをソートしたとき、ソート後の列の表示が一番左になります。そのままの列の表示を維持する方法はありませんでしょうか。
編集 削除これは、
例えば、「フィールドA」「フィールドB」「フィールドC」「フィールドD」
があり、「フィールドC」でソートした時、
並びが
「フィールドC」「フィールドA」「フィールドB」「フィールドD」
になるのですか?
それともDBGridで横にスクロールしてしまい、
(「フィールドA」「フィールドB」が隠れて)
「フィールドC」「フィールドD」が表示するのですか?
説明不足ですみません。
例えば、「フィールドA」「フィールドB」「フィールドC」「フィールドD」があり、初期画面では「フィールドD」が隠れいているとします。
横スクロールで隠れいていた「フィールドD」のタイトルをクリックしてソートした後に、横スクロールでまた「フィールドD」が隠れてしまいますが、これを回避したいと苦労しています。よろしくお願いします。
>これを回避したいと苦労しています。
とのことなので、すでにいろいろ試されていると思いますが、
SelectedField プロパティ
SelectedIndex プロパティ
あたりを指定して、
(ソート前と全く同じにはならないかもしれませんが)
希望する列を表示するように調節などは、できますか?
# 試していませんので、うまくいくかわかりませんが・・
こんにちは.Mr.XRAYです.
横スクロールの位置を記憶しておいて,ソートしたら記憶しておいた分だけ横
スクロールさせる,という考え方はどうでしょう.
var
APos : Integer;
begin
//現在の横スクロールバーの位置を記憶しておく
APos := GetScrollPos(DBGrid1.Handle,SB_HORZ);
//表示コントロールの更新停止
Query1.DisableControls;
//ソートやDBGrid1に対する操作
//表示コントロールの表示再開
Query1.EnableControls;
//記憶しておいた位置まで横スクロール
SetScrollPos(DBGrid1.Handle,SB_HORZ,APos,True);
end;
環境が書いてないので,とりあえず,
WindowsXP(SP3) + Delphi6,7,2007,2009,2010で動作確認しました.
参考ページ
http://mrxray.on.coocan.jp/Halbow/Chap14.html
皆さん、ありがとうございました。
Mr.XRAY さんの、方法でもうまくいかず、いろいろと試行錯誤したら、
DBGrid1.Options で [dgRowSelect]を設定していたためでした。
これをはずしたら、うまくいきました。
今後ともよろしくお願いします。