「ソートされていない」状態を実装するのはそれほど簡単ではありません。データがソートされると、バンド内で単純に並べ替えられます。以下のコードを適用すると、自分で確認できます。
Infragistics.Win.UltraWinGrid.UltraGridColumn[] oldSort;
private void Sort() {
ultraGrid1.BeforeSortChange += new Infragistics.Win.UltraWinGrid.BeforeSortChangeEventHandler(ultraGrid1_BeforeSortChange);
ultraGrid1.AfterSortChange += new Infragistics.Win.UltraWinGrid.BandEventHandler(ultraGrid1_AfterSortChange);
}
void ultraGrid1_BeforeSortChange(object sender, Infragistics.Win.UltraWinGrid.BeforeSortChangeEventArgs e) {
oldSort = new Infragistics.Win.UltraWinGrid.UltraGridColumn[e.Band.SortedColumns.Count];
e.Band.SortedColumns.CopyTo(oldSort, 0);
}
void ultraGrid1_AfterSortChange(object sender, Infragistics.Win.UltraWinGrid.BandEventArgs e) {
for (int i = 0; i < oldSort.Length; i++) {
for (int j = 0; j < e.Band.SortedColumns.Count; j++) {
Infragistics.Win.UltraWinGrid.UltraGridColumn column = e.Band.SortedColumns[j];
if (column.Key == oldSort[i].Key) {
if (column.SortIndicator == Infragistics.Win.UltraWinGrid.SortIndicator.Ascending) {
//column.SortIndicator = Infragistics.Win.UltraWinGrid.SortIndicator.None;
e.Band.SortedColumns.Remove(column.Key);
j--;
break;
}
}
}
}
}
私の推測では、配列に従って、行インデックスを含む別の配列を保持し、並べ替えが削除されたらバンド内の行を並べ替える必要があると思います。しかし、それは私の意見ではメモリを消費する可能性があります。
もう 1 つの方法は、単純な for ループでインクリメントされた整数で埋められる隠し列を追加することです。列の並べ替えが「削除」されたら、非表示の列に昇順並べ替えを適用するだけです。ただし、このような方法で維持する必要がある他の側面があります。