ユーザーが列ヘッダーをクリックしたときに DataGridView の並べ替えを有効にするにはどうすればよいでしょうか? 質問する

ユーザーが列ヘッダーをクリックしたときに DataGridView の並べ替えを有効にするにはどうすればよいでしょうか? 質問する

フォームにデータグリッドビューがあり、次のように入力します。

dataGridView1.DataSource = students.Select(s => new { ID = s.StudentId, RUDE = s.RUDE, Nombre = s.Name, Apellidos = s.LastNameFather + " " + s.LastNameMother, Nacido = s.DateOfBirth })
                                   .OrderBy(s => s.Apellidos)
                                   .ToList();

現在、デフォルトの並べ替えとして s.Apellidos を使用していますが、列ヘッダーをクリックしたときにユーザーが並べ替えられるようにもしたいと考えています。

この種はないデータを何らかの方法で変更することはできませんが、これは、画面を目でスキャンするときに情報を簡単に検索できるようにするためのクライアント側のボーナスにすぎません。

ご提案ありがとうございます。

ベストアンサー1

すべての列(ユーザーが並べ替え可能な列)のSortModeプロパティをAutomaticに設定します。

dataGridView1.DataSource = students.Select(s => new { ID = s.StudentId, RUDE = s.RUDE, Nombre = s.Name, Apellidos = s.LastNameFather + " " + s.LastNameMother, Nacido = s.DateOfBirth })
                                   .OrderBy(s => s.Apellidos)
                                   .ToList();

    foreach(DataGridViewColumn column in dataGridView1.Columns)
    {
    
        column.SortMode = DataGridViewColumnSortMode.Automatic;
    }

編集:データグリッドビューは linq クエリにバインドされているため、ソートされません。そのため、[404 dead link, see next section]ソート可能なバインディング リストを作成し、それをデータ ソースとしてデータグリッドビューにフィードする方法を説明したこのドキュメントを参照してください。

デッドリンクから復元されたコード

上記のリンクは404エラーです。インターネットウェイバックマシンからコードを復元しました。アーカイブページの。

public Form1()
{
    InitializeComponent();

    SortableBindingList<person> persons = new SortableBindingList<person>();
    persons.Add(new Person(1, "timvw", new DateTime(1980, 04, 30)));
    persons.Add(new Person(2, "John Doe", DateTime.Now));

    this.dataGridView1.AutoGenerateColumns = false;
    this.ColumnId.DataPropertyName = "Id";
    this.ColumnName.DataPropertyName = "Name";
    this.ColumnBirthday.DataPropertyName = "Birthday";
    this.dataGridView1.DataSource = persons;
}

おすすめ記事