在代码中设置cxTreeList按多列排序

因为cxTreeList比cxGrid更简单易用,所以在一些需要显示非数据绑定列表的场合,我通常都会选择使用cxTreeList。
cxTreeList和cxGrid一样,都支持多列排序,只需将OptionsBehavior.MultiSort属性设置成True就可以了。
在运行期设置多列排序很简单,按住Shift键依次点击表头,就会按照点击的顺序进行多列排序。

上面的效果就是按住Shift键依次点击『年级』、『班级』、『姓名』得到的。

可是想要在代码中实现同样的效果却遇到了问题,ExpressQuantumGrid的帮助Sorting Data有一段Demo,代码如下:

Code


按照上面的Demo去依次设置cxTreeList,却发现设置后只有最后一列正确设置为排序状态。当设置第二个列的排序状态时,会自动清除第一个列的排序设置。Column有一个SortIndex属性,原本是用来标识列的排序顺序的,可是当设置列的SortOrder时,其他列的SortOrder会自动设置为soNone,SortIndex也为自动设置为-1。
研究了一下cxTreeListColumn的源码,发现设置SortOrder会执行SetSortOrder,而SetSortOrder会调用ChangeSortOrder,最终会调用TcxCustomTreeList.ColumnSortOrderChanged。

Code

在上面代码的第7行,我们可以看出AShift参数传入的是[],因此在上面代码的第36行会执行清除所有列排序的操作。

原因是找到了,问题就好办了,只需要在设置SortOrder的时候将AShift参数设置为[ssShift]就可以了,可是ChangeSortOrder是protected的,无法直接调用。
怎么办?这个是老把戏了。

Code

 

posted on 2009-09-05 20:57  xinnia  阅读(1800)  评论(0)    收藏  举报

导航