- PR -

DataGridView ソート禁止

1
投稿者投稿内容
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2007-06-08 18:10
VB2005のDataGridView に関して教えてください。
列ヘッダをクリックしたときに
そのイベントを受け取ってそのイベント内で
ソートをキャンセルできませんか?

一度
RowHeaderMouseClickでCancelを受け取ろうとしましたが
出来ませんでした。
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2007-06-08 18:39
引用:

Kiraさんの書き込み (2007-06-08 18:10) より:
ソートをキャンセルできませんか?


 こういうことかな:
「DataGridViewColumn.SortMode プロパティ」

[ メッセージ編集済み 編集者: lalupin4 編集日時 2007-06-08 23:46 ]
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2007-06-09 11:06
ご返答有難うございます。

最終的にやりたいことはSotemodeにてできるのですが、

”HeaderCellをクリックされたときのイベントハンドラを使って”
という手法を使いたいので
アドバイスお願いいたします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2007-06-09 15:34
諸農です。

キャンセルの条件がよく分からないのですが、SortModeをProgrammaticにしておいて、DataGridView.ColumnHeaderMouseClickイベントの説明の所に書かれているサンプルのようなソート処理をキャンセル/スキップまたは実行するようにするってことではいかがでしょうか?
Automaticに設定されているものをキャンセルしたいということでしたら、それはプログラムでの実装をすると言う事になると思います。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2007-06-09 19:44
DataGridViewにデータをバインドした情報は
30列100行になります。

バインド後その30行に対してSortModeをソートできないように指定するのですが
その部分だけで処理が5sec近くかかっておりました。

そのため、SortModeを指定しない方法を考えると
Headerをクリックしたときにキャンセルしたらできる
と思ったため 今回の方法を思いつきました。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2007-06-10 05:57
諸農です。

引用:

Kiraさんの書き込み (2007-06-09 19:44) より:
DataGridViewにデータをバインドした情報は
30列100行になります。

バインド後その30行に対してSortModeをソートできないように指定するのですが
その部分だけで処理が5sec近くかかっておりました。



30列で5秒というのは驚きですね。

下のコードで計測を試してみましたが大体100ミリ秒以下に収まっているようです。
コード:
        DataTable dt = new DataTable("MyTable");
        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 30; i++)
            {
                dt.Columns.Add(string.Format("ColName{0:d3}",i),typeof(string));
            }

            Random r = new Random();
            for (int i = 0; i < 100; i++)
            {
                DataRow dr = dt.NewRow();
                for (int ii = 0; ii < 30; ii++)
                {
                    dr[ii] = string.Format("Col{0:d3} - Value{1:d3}", ii,r.Next(100));
                }
                dt.Rows.Add(dr);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = null;

            Stopwatch sw = new Stopwatch();
            sw.Start();

            dataGridView1.DataSource = dt;
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
                dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.Programmatic;

            sw.Stop();
            MessageBox.Show(string.Format("経過時間 : {0}ミリ秒", sw.ElapsedMilliseconds));

        }




_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
1

スキルアップ/キャリアアップ(JOB@IT)