0

ねえ、HeaderName などの情報を含む、ある種の列プロパティ リストがあります。また、アイテムのリストにバインドされたデータグリッドがあります。列は、列プロパティ リストのようなものです。

これで、ユーザーは表示される列の位置と幅を調整できるようになりました。それは、可能な 30 列のうちの 3 列だけです。しかし、リストの「ソートされた」部分を古いリストに保存したいと思います。

さて、私の最初のアプローチは次のとおりです。

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 で正しくソートされていません。

これを解決する方法はありますか?

4

1 に答える 1

0

これはどう:

  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-11T06:39:18.160 に答える