DataGridViewのソート
DataGridViewのソートは実はstable_sortではないっ!
ということでstable_sortにしてみた。
C#(というかVS2005)のすばらしいところはイベントを駆使することによって
あらゆる動作を自由自在にカスタマイズ可能な点だ。
まあ、あらゆるは言い過ぎだがかなり自由自在だ。
実装方法↓
まずDataGridViewに対してSorted, SortCompareのイベントを追加
そして実装を下記のようにする
#region "stable_sortを実現するためのコード" private Dictionary_originalRowIndex = new Dictionary (); private void dataGridView_Sorted(object sender, EventArgs e) { // ソート完了後にはクリアする _originalRowIndex.Clear(); } private void dataGridView_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { // まずソート開始前に元のインデックスを覚えておく // ソート前のイベントが拾えればこんなことしないのに... if (_originalRowIndex.Count == 0) { for (int i = 0; i < this.dataGridView.RowCount; ++i){ _originalRowIndex.Add(this.dataGridView.Rows[i], i); } } int result = System.String.Compare(e.CellValue1.ToString().Trim(), e.CellValue2.ToString().Trim()); if (result == 0){ // 等値のときは元のインデックスで判断 int index1 = this._originalRowIndex[this.dataGridView.Rows[e.RowIndex1]]; int index2 = this._originalRowIndex[this.dataGridView.Rows[e.RowIndex2]]; if (index1 < index2){ result = -1; } else if (index1 > index2) { result = 1; } } e.SortResult = result; e.Handled = true; } #endregion