Telerik RADGrid和分拣
我正在使用WPF的RADGridView来显示一些数据。它是从数据库中动态提取的,所以我不知道每个单元格中包含的列名或数据类型。我想让用户在双击列标题时对每列上的数据进行排序 由于某种原因,网格无法排序。这就是我目前所拥有的Telerik RADGrid和分拣,telerik,radgridview,Telerik,Radgridview,我正在使用WPF的RADGridView来显示一些数据。它是从数据库中动态提取的,所以我不知道每个单元格中包含的列名或数据类型。我想让用户在双击列标题时对每列上的数据进行排序 由于某种原因,网格无法排序。这就是我目前所拥有的 private void SetEventHandlers() { if (_grid != null) { _grid.AddHandler(GridViewCellBase.
private void SetEventHandlers()
{
if (_grid != null)
{
_grid.AddHandler(GridViewCellBase.CellDoubleClickEvent, new EventHandler<RadRoutedEventArgs>(OnCellDoubleClick), true);
}
}
private void OnCellDoubleClick(object sender, RoutedEventArgs e)
{
GridViewCellBase cell = e.OriginalSource as GridViewCellBase;
if (cell != null && cell is GridViewHeaderCell)
{
SetSorting(cell);
}
}
private void SetSorting(GridViewCellBase cell)
{
GridViewColumn column = cell.Column;
SortingState nextState = GetNextSortingState(column.SortingState);
_grid.SortDescriptors.Clear();
if (nextState == SortingState.None)
{
column.SortingState = SortingState.None;
}
else
{
_grid.SortDescriptors.Add(CreateColumnDescriptor(column, nextState));
column.SortingState = nextState;
}
}
事实证明,我的RadGrid数据绑定到了一个可观察的集合。网格本身的排序功能不起作用。解决方案是对可观察到的集合进行排序。我最终使用linq对ObservableCollection进行排序。您是否明确禁用了内置排序功能?默认情况下,我相信单击列标题将执行排序(因此尝试双击进行排序听起来很危险)。另外,有什么原因不能使用内置排序吗?但是你应该用你的方式去做。我能够进行一个简单的测试。我想您需要注释掉设置column.SortingState的行。这应该没有必要。你能发布你的
CreateColumnDescriptor
方法吗?我发布了“CreateColumnDescriptor”代码。我们禁用默认排序的原因是,我们正在共享具有排序状态的“视图”,并将它们存储在数据库中。听起来很奇怪,我知道你发布的代码在我尝试时似乎很好用。你有什么行为?您是否尝试过在不同的位置设置断点,以确保事情按照预期的方式进行?我假设您正在适当的时间调用SetEventHandlers
(您检查null
,这似乎很奇怪-如果网格为null,那么将不会发生任何事情,因为您将无法附加事件)?我发现了问题所在。网格绑定到一组对象。为了对其元素进行排序,我需要对该集合进行排序。您应该在答案中发布您为解决问题所做的工作,并将其标记为已接受(这将使人们在将来更容易看到,而不仅仅是这些评论)。
private ColumnSortDescriptor CreateColumnDescriptor(GridViewColumn column, SortingState sortingState)
{
ColumnSortDescriptor descriptor = new ColumnSortDescriptor();
descriptor.Column = column;
if (sortingState == SortingState.Ascending)
{
descriptor.SortDirection = ListSortDirection.Ascending;
}
else
{
descriptor.SortDirection = ListSortDirection.Descending;
}
return descriptor;
}