积极答复者
关于使用datagridView和linq的问题

问题
-
//现在由于datagridView绑定的数据源不是从DataTable中得来的,是由List<MCYC>对象绑定,所以点击datagridView的属性时,不作升序降序了,所以得手动编写代码,由于属性太多,不可能一一编写,所以想动态,以e为参数编写
private void dgv_CYC_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
List<MCYC> Mcycs = dgv_CYC.DataSource as List<MCYC>;
var mcycs =
from mcyc in Mcycs
orderby mcyc.GetType().GetProperty(dgv_CYC.Columns[e.ColumnIndex].Name) descending //关键是这里的问题,怎样动态的order by某个属性呢?
select mcyc;
dgv_CYC.DataSource = mcycs.ToList();
}急急急,在线等
答案
-
您好,
您可以使用 System.Linq.Dynamic
string orderName = dgv_CYC.Columns[e.ColumnIndex].Name; List<MCYC> Mcycs = dgv_CYC.DataSource as List<MCYC>; var mcycs = Mcycs.AsQueryable().OrderBy(orderName).Select(c => c); dgv_CYC.DataSource = mcycs.ToList();
- 已标记为答案 yaoly 2014年7月15日 3:11
全部回复
-
您好,
您可以使用 System.Linq.Dynamic
string orderName = dgv_CYC.Columns[e.ColumnIndex].Name; List<MCYC> Mcycs = dgv_CYC.DataSource as List<MCYC>; var mcycs = Mcycs.AsQueryable().OrderBy(orderName).Select(c => c); dgv_CYC.DataSource = mcycs.ToList();
- 已标记为答案 yaoly 2014年7月15日 3:11
-
您好,
加入空白就是ascending哦!
要descending 的話,就加在後面就可以了! 如下,希望對您有幫助,
private string orderColumn = string.Empty ; private string ordering = string.Empty; private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { string columnName = dgv_CYC.Columns[e.ColumnIndex].Name; if (string.IsNullOrWhiteSpace(orderColumn)) { orderColumn = columnName; ordering = "descending"; } else { if(orderColumn.Equals(columnName, StringComparison.InvariantCultureIgnoreCase)){ ordering = string.IsNullOrWhiteSpace(ordering) ? "descending" : string.Empty; }else{ orderColumn = columnName; ordering = string.Empty; } } string orderExpression = string.Format("{0} {1}", orderColumn, ordering); List<MCYC> Mcycs = dgv_CYC.DataSource as List<MCYC>; var mcycs = Mcycs.AsQueryable().OrderBy(orderExpression).Select(c => c); dgv_CYC.DataSource = mcycs.ToList(); }
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
- 已编辑 亂馬客 2014年7月15日 5:22