通过列集合在C#中对列表进行排序
问题描述:
嘿,我有一些列属性列表,包含像HeaderName等信息 而且我有一个Datagrid绑定到项目列表,列是像列属性名单。通过列集合在C#中对列表进行排序
所以现在用户可以调整可见列的位置和宽度。这可能只有30个可能的列中的3个。 但我想将列表的“排序”部分保存到旧列表中。
好吧,我hesre第一种方法:
var columns = grid.Columns.OrderBy(p => p.DisplayIndex);
var prop = DynamicManager.GetPropertyGridByTableNameGroupLanguage("Article", 1, 1);
var orderesProp = from o in columns
join i in prop
on o.Header.ToString() equals i.PropertyName
orderby o.DisplayIndex
select new TableProperty
{
DbPropertyType = i.DbPropertyType,
GroupingProperty = i.GroupingProperty,
Mandatory = i.Mandatory,
MandatoryDB = i.MandatoryDB,
MaxValue = i.MaxValue,
MaxValueDB = i.MaxValueDB,
MinValue = i.MinValue,
MinValueDB = i.MinValueDB,
PropertyImportCode = i.PropertyImportCode,
PropertyName = i.PropertyName,
ReadOnly = i.ReadOnly,
Searchable = i.Searchable,
UIPropertyName = i.UIPropertyName,
UIPropertyType = i.UIPropertyType,
Visible = i.Visible,
VisibleInGrid = i.VisibleInGrid,
Width = o.ActualWidth
};
当我第一次从栏目中选择,我得到的名单正确排序,但只有31的3项。当我先选择prop,然后加入列时,我仍然有完整的列表,但没有通过displayindex正确排序。
你有什么想法如何解决这个问题?
答
如何:
var orderesProp = from i in prop
select new { i = i, o = columns.FirstOrDefault(x => i.Name == x.Name) } into merge
orderby merge.o == null ? int.MaxValue : merge.o.DisplayIndex
select merge.i;
嘿,感谢您的答案,但你的解决方案似乎并不为我工作。它仍然不是正确的列表:/ – 2012-07-11 06:59:08
你能澄清什么是错的?在我的示例应用程序中,我获取了prop和list的所有元素,并以显示顺序中与可见列相对应的元素开头,然后所有其他(不可见)元素休耕。 – Rafal 2012-07-11 07:14:45
我按编号,代码和名称对网格进行排序,但在orderesProp中,排序的值不会排序。 甚至“不可见”的对象介于列表之间,所以它不是列索引第一,然后其余的项目:( – 2012-07-11 08:43:28