【发布时间】:2019-01-09 09:53:24
【问题描述】:
我正在使用 devexpress,并且有一个包含多列的树形列表。
默认情况下,根据客户要求,数据以“升序”排序呈现。
问题:
我有一个按钮可以禁用列的排序。我有这两个属性可以使用: "OptionsColumn.AllowSort" 和 SortOrder 。问题是即使我设置了OptionsColumn.AllowSort = false,在更改列值时仍然会触发排序,因为我有SortOrder 的Ascending。
我发现如果我将 OptionsColumn.AllowSort = false 和 SortOrder 更改为 None 这会给我想要的行为但是当我将 sortOrder 更改为 None 时这会触发一个让客户感到困惑的排序.
我想要什么:
简单地说,我需要“冻结”排序,这意味着当用户单击“DisableSorting”时,列表不会像将 sortOrder 更改为“none”时那样排序它只会保持原样,并且在更改排序值时不应触发。
代码
禁用按钮:
private void DisableSorting_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
foreach (var c in xtlItemList.Columns)
{
c.OptionsColumn.AllowSort = false; // disable sorting on all columns
}
EnableSorting= false; // global variable indicating that the sorting shoult be disabled
}
treeList startSorting 事件:
private void xtlItemList_StartSorting(object sender, EventArgs e)
{
try
{
var tree = (MatrixXTreeList)sender;
DevExpress.XtraTreeList.Columns.TreeListColumn col = tree.GetSortColumn(0);
if (EnableSorting == true) // if sorting enabled
{
var treeTest = (MatrixXTreeList)sender;
DevExpress.XtraTreeList.Columns.TreeListColumn col2 = treeTest.GetSortColumn(0);
if (col != null)
SetSortColumnID((MatrixXTreeList)sender, afterUpdate);
else
{
col.SortOrder = SortOrder.None;
}
}
else
{
col.SortOrder = SortOrder.None; // if sorting diabled,
//problem still triggers a sort since the SortOrder is changed from Ascending to None
}
}
catch (Exception ex)
{
}
}
如何实现期望的行为?
【问题讨论】:
标签: c# .net winforms sorting devexpress