2012-01-21 3 views
0

私は並べ替えることを探しているdatagridviewがあります。 1つの列は2〜3桁の長さの「ページ」になります。私は両方でデータをソートしようとしている1〜3の数である「アイテム」と呼ばれる別の列を持って、ページの最初にしてアイテム:dataGridViewでセカンダリカラムをソートするにはどうすればよいですか?

(例)

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

答えて

0

私はこれを知っています投稿は少し古いですが、私はここで答えを探しに来て、他の誰も反応しなかったので、私はここに1つ置くと思った。

最初にする必要があるのは、ヘッダーの自動並べ替えを無効にすることです。私は私が実際に見つかったdisableSort方法は、プログラム的

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

にソートモードを設定することにより、最高の作品を呼び出しDGVにデータソースをバインドした後、それから私は、DataGridにCellMouseDownイベントに

 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でソートしたい)。ユーザーがどの列をソートしているのか、現在のソート順はどうなっているのかを把握し、その逆をとり、セカンダリ列を最初にソートし、プライマリをソートします。

関連する問題