使用linq字符串比较器在标题单击时对Datagrid视图进行排序

时间:2018-09-12 16:13:07

标签: c# linq columnsorting

有一个DataGridView,我要在该DataGridView上单击标题以实现排序。 使用linq我尝试了以下方法,但无法排序。你能指导我哪里出错了吗

`       var param = DGV.Columns[e.ColumnIndex].DataPropertyName;
        var propertyInfo = typeof(EditItem).GetProperty(param);

        IEnumerable<object> Items;
        Items= ObjectX.BindingList();

        if (so == SortOrder.Ascending)
        {                
            DGV.DataSource = Items.OrderBy(x => propertyInfo.GetValue(x, null) as String, StringComparer.OrdinalIgnoreCase).ToList();
        }
        else
        {
            DGV.DataSource = Items.OrderByDescending(x => propertyInfo.GetValue(x, null) as String, StringComparer.OrdinalIgnoreCase).ToList();
        }

        grid.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = so;`

1 个答案:

答案 0 :(得分:2)

尝试:

if (so == SortOrder.Ascending)
{                
    DGV.DataSource = Items.OrderBy(x => propertyInfo.GetValue(x, null).ToString(), StringComparer.OrdinalIgnoreCase).ToList();
}
else
{
    DGV.DataSource = Items.OrderByDescending(x => propertyInfo.GetValue(x, null).ToString(), StringComparer.OrdinalIgnoreCase).ToList();
}

相反。如果使用安全的强制转换as语句无法将对象强制转换为类型,则它将返回null,这意味着它将不进行任何排序。