List<T>
はソートを直接サポートしていません。
代わりに、Linqルーチンを使用して並べ替えを行うことができます。
あなたが知らない列のあなたの数限りとなりますソートフィールドのチェック..
を含める必要がありますしかし、あなたのcustomobject
クラスはのはName
クラスで試してみましょう:
class Name
{
public string first { get; set; }
public string last { get; set; }
public string middle { get; set; }
public Name (string f, string m, string l)
{
first = f; middle = m; last = l;
}
}
今度は、ColumnHeaderMouseClick
イベントをコーディングしてみましょう:私は、現在のソート列と順序を保存
private void dataGridView1_ColumnHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
List<Name> names = dataGridView1.DataSource as List<Name>;
string col = dataGridView2.Columns[e.ColumnIndex].DataPropertyName;
string order = " ASC";
if (dataGridView1.Tag != null)
order = dataGridView1.Tag.ToString().Contains(" ASC") ? " DESC" : " ASC";
dataGridView1.Tag = col + order;
if (order.Contains(" ASC"))
names = names.OrderBy(x => col == "first"? x.first
: col == "last" ? x.last : x.middle).ToList();
else
names = names.OrderByDescending(x => col == "first"? x.first :
col == "last" ? x.last : x.middle).ToList();
dataGridView1.DataSource = names;
}
注意DGVのTag
。クラスレベルの変数または他の場所に移動することができます。残念ながら、DGVのSortOrder
プロパティは設定できません。
出典
2016-10-14 15:35:14
TaW
をクリックしてソートボタン - >ソートあなたのリスト - >は、データソース - >あなたはあなたの問題を解決した – mybirthname
グリッドを再バインドしているのですか? – TaW