5

列ヘッダーを含むソートされたリストがあります。ソートされたリストと同じ順序になるようにデータグリッドビューを再配置するにはどうすればよいですか?

以下のコードを試しましたが、これが常に機能するとは限りません。一部の列が正しくソートされていません。これについて助けてくれてありがとう。

sortedColumnNames.Sort();

    foreach (DataGridViewColumn col in dataGridView1.Columns)
                    {
                        col.DisplayIndex = sortedColumnNames.IndexOf(col.HeaderText);
                    }

sortedColumnNames: アテネ クレタ コルフ ケファロニア ミコノス ロードス サントリーニ スキアトス ザンテ

4

3 に答える 3

5

あなたの問題がSortedColumnNames適切にソートされていないことなのか (そうでないのか)、それとも列がリストに表示されている順序とは異なる順序に割り当てられていることなのか、私にはわかりません。

後者の場合は、コレクションを繰り返し処理しているときにコレクション内のアイテムの順序を変更していることが原因である可能性があります。私が実行しているテストのいずれかでそれが起こるのを見たことはありませんが。

原則として、イテレートしているコレクションのメンバーシップ順序をいじることはありません。この方法で列の並べ替えを実装します。

void SortDataGridViewColumns(DataGridView dgv)
{
    var list = from DataGridViewColumn c in dgv.Columns
               orderby c.HeaderText
               select c;

    int i = 0;
    foreach (DataGridViewColumn c in list)
    {
        c.DisplayIndex = i++;
    }
}
于 2008-12-08T01:27:25.253 に答える
0

それはうまくいくようです。テスト用の簡単なアプリを作成したところ、問題なく動作しました。いつ機能し、いつ機能しないかを正確に突き止めることができますか? それらが機能しないと言うとき、順番が狂っているのは常に同じ列ですか?

于 2008-12-08T01:21:33.753 に答える
0

次の方法で実行できます。

  1. すべての列を List tmpColumns に追加します
  2. dgv.Columns からすべての列を削除します
  3. tmpColumns を名前で並べ替える
  4. 列を tmpColumns から dgv.Columns に戻し、DisplayIndex を次の値 0、1、2 などに設定します。

理想的ではありませんが、機能します。

于 2008-12-09T11:38:03.273 に答える