2012-01-21 55 views
0

我有一個datagridview,我正在尋找排序。一列是「Page」,這是一個2-3位數字的長度。我有一個名爲「項」的另一列是數字1和3之間,我試圖通過這兩個數據進行排序,頁面,然後再項:如何排序dataGridView中的輔助列?

(例如)

Page 01, item 1 
Page 01, item 2 
Page 02, item 2 
Page 02, item 3 

回答

0

我知道這帖子有點老了,但我來到這裏尋找答案,沒有人迴應,所以我想我會在這裏放一個。

您需要做的第一件事是禁用標題上的自動排序。之後,我的數據源綁定到DGV我稱之爲disableSort方法,我居然發現最適合通過設置排序模式綱領性

private void disableSort() 
    { 
     foreach(DataGridViewColumn dc in dataGridView2.Columns) 
     { 
      dc.SortMode = DataGridViewColumnSortMode.Programmatic; 
     } 
    } 

然後我綁到CellMouseDown事件DataGrid上

 private void dataGridView2_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     if (e.RowIndex == -1) 
     { 
      int rIdx = dataGridView2.SelectedCells[0].RowIndex; 
      seq = dataGridView2.Rows[rIdx].Cells["SequenceNo"].Value.ToString(); 

      int selectedColumnIdx = e.ColumnIndex; 
      ListSortDirection direction; 

      if (dataGridView2.SortedColumn == dataGridView2.Columns[selectedColumnIdx]) 
      { 
       if (dataGridView2.SortOrder == SortOrder.Ascending) 
       { 
        direction = ListSortDirection.Descending; 
       } 
       else 
       { 
        direction = ListSortDirection.Ascending; 
       } 
      } 
      else 
      { 
       direction = ListSortDirection.Ascending; 
      } 

      this.dataGridView2.Sort(this.dataGridView2.Columns["SequenceNo"], ListSortDirection.Ascending); 
      this.dataGridView2.Sort(this.dataGridView2.Columns[selectedColumnIdx], direction); 
     } 

如果你進入ColumnHeaderMouseClick事件,你可以跳過我的RowIndex檢查

我使用SequenceNumber作爲我的第二種排序(在用戶選擇一個列進行排序後,他們希望它通過sequenceNumber排序)。只要找出用戶正在排序的列,它當前的排序順序是什麼,採取相反的操作,然後先排序次列,然後再排序。