Ejemplo n.º 1
0
        /// <summary> 向全局的排序字段集合中添加一个字段 </summary>
        /// <param name="field"></param>
        /// <returns>所添加的列 或者是 修改的最后一列 </returns>
        public SortColumn AddSortColumn(string field)
        {
            SortColumn sc;
            const bool defaultAsc = true;

            if (SortColumns.Count == 0)
            {
                _Index += 1;
                sc      = new SortColumn(_Index, field, defaultAsc);
                SortColumns.Add(sc);
            }
            else
            {
                if (field == _lastField.Field)
                {
                    // 只修改集合中最后一个字段排序的升降
                    sc        = _lastField;
                    sc.Ascend = !sc.Ascend;
                }
                else
                {
                    // 看当前点击的字段列是不是已经点击过了的
                    sc = SortColumns.FirstOrDefault(r => r.Field == field);
                    if (sc == null)
                    {
                        // 说明当前点击的是一个新列
                        _Index += 1;
                        sc      = new SortColumn(_Index, field, defaultAsc);
                        SortColumns.Add(sc);
                    }
                    else
                    {
                        // 说明当前点击的是一个已经点击过的列
                        _Index   += 1;
                        sc.Ascend = !sc.Ascend;
                        sc.Index  = _Index;
                    }
                }
            }
            // 重新对 Index 进行编号
            SortColumns.Sort(SortOrderComparerAsc);
            for (int j = 0; j < SortColumns.Count; j++)
            {
                SortColumns[j].Index = j + 1;
            }
            //
            _lastField = sc;
            return(sc);
        }
Ejemplo n.º 2
0
        public string GetSortCriterior()
        {
            if (SortColumns.Count == 0)
            {
                return(null);
            }
            // 排序,将小编号排到前面,说明最先选的级别最高
            SortColumns.Sort(SortOrderComparerAsc);
            var        sb = new StringBuilder();
            string     asc;
            SortColumn sc = SortColumns[0];

            // 第一个
            asc = sc.Ascend ? "ASC" : "DESC";
            sb.Append($"{sc.Field} {asc}");
            // 剩下的字段
            for (int i = 1; i < SortColumns.Count; i++)
            {
                sc  = SortColumns[i];
                asc = sc.Ascend ? "ASC" : "DESC";
                sb.Append($", {sc.Field} {asc}");
            }
            return(sb.ToString());
        }
Ejemplo n.º 3
0
 /// <summary> 编号小的排前面 </summary>
 private int SortOrderComparerAsc(SortColumn s1, SortColumn s2)
 {
     return(s1.Index.CompareTo(s2.Index));
 }