none
关于使用datagridView和linq的问题 RRS feed

  • 问题

  • //现在由于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(); 
               
            }

    急急急,在线等

    2014年7月15日 1:37

答案

全部回复

  • 您好,

    您可以使用 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();  


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 yaoly 2014年7月15日 3:11
    2014年7月15日 2:26
  • 亂馬客太强大了,能用能用


    • 已编辑 yaoly 2014年7月15日 3:17
    2014年7月15日 3:12
  • 弱弱的多问一下,asceding又怎么码呢
    2014年7月15日 3:17
  • 您好,

    加入空白就是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:21