2011-09-30 338 views
2

我正在使用RADGridView WPF來顯示一些數據。它是從數據庫動態拉取的,所以我不知道列名或每個單元格中包含的數據類型。我想讓用戶在雙擊列標題時對每列上的數據進行排序。Telerik RADGrid和排序

由於某種原因網格不能排序。這是我迄今爲止所擁有的。

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

     } 

編輯:

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

您是否明確禁用了內置排序功能?默認情況下,我相信點擊列標題將執行排序(所以嘗試對雙擊聲音進行排序是危險的)。另外,有沒有理由不能使用內置排序?但按照你的方式去做就應該有效。我能夠進行簡單的測試。我想你會想要註釋掉設置column.SortingState的行。這不應該是必要的。你可以發佈你的'CreateColumnDescriptor'方法嗎? –

+0

我發佈了'CreateColumnDescriptor'代碼。我們禁用默認排序的原因是因爲我們共享具有排序狀態並將它們存儲在數據庫中的「視圖」。聽起來很奇怪我知道 – Omar

+1

你發佈的代碼似乎工作正常,當我嘗試它。你有什麼行爲?你有沒有嘗試在各個地方放置斷點以確保事情正如你所期待的那樣發生?我假設你在適當的時候調用了'SetEventHandlers'(看起來很奇怪,你檢查了'null' - 如果網格爲空,那麼沒有事情會發生,因爲你將無法附加事件)? –

回答

1

原來比我radgrid控件的數據綁定到一個ObservableCollection。網格排序功能本身不起作用。排序ObservableCollection是解決方案。我最終使用linq排序了ObservableCollection。