Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Telerik RADGrid和分拣_Telerik_Radgridview - Fatal编程技术网

Telerik RADGrid和分拣

Telerik RADGrid和分拣,telerik,radgridview,Telerik,Radgridview,我正在使用WPF的RADGridView来显示一些数据。它是从数据库中动态提取的,所以我不知道每个单元格中包含的列名或数据类型。我想让用户在双击列标题时对每列上的数据进行排序 由于某种原因,网格无法排序。这就是我目前所拥有的 private void SetEventHandlers() { if (_grid != null) { _grid.AddHandler(GridViewCellBase.

我正在使用WPF的RADGridView来显示一些数据。它是从数据库中动态提取的,所以我不知道每个单元格中包含的列名或数据类型。我想让用户在双击列标题时对每列上的数据进行排序

由于某种原因,网格无法排序。这就是我目前所拥有的

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;
        }