通过列集合在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; 
+0

嘿,感谢您的答案,但你的解决方案似乎并不为我工作。它仍然不是正确的列表:/ – 2012-07-11 06:59:08

+0

你能澄清什么是错的?在我的示例应用程序中,我获取了prop和list的所有元素,并以显示顺序中与可见列相对应的元素开头,然后所有其他(不可见)元素休耕。 – Rafal 2012-07-11 07:14:45

+0

我按编号,代码和名称对网格进行排序,但在orderesProp中,排序的值不会排序。 甚至“不可见”的对象介于列表之间,所以它不是列索引第一,然后其余的项目:( – 2012-07-11 08:43:28