我有一個DataGridView。重新應用排序到DataGrid?
我可以單擊列標題來按照我點擊的任何列標題對數據進行排序。
我有一些功能,清除DataGridView,並重新填充數據。我遇到的問題是,即使數據未按該列排序,因爲它只是加載到DataGridView中,所以在特定列(灰色倒置或倒置三角形)中排序的指示仍然存在。
有沒有什麼方法可以在新數據添加後重新應用排序?
編輯:如果這不是很容易,只要能夠擺脫那個灰色的顛倒或倒置的三角形就足夠好,所以很明顯數據沒有排序。
我有一個DataGridView。重新應用排序到DataGrid?
我可以單擊列標題來按照我點擊的任何列標題對數據進行排序。
我有一些功能,清除DataGridView,並重新填充數據。我遇到的問題是,即使數據未按該列排序,因爲它只是加載到DataGridView中,所以在特定列(灰色倒置或倒置三角形)中排序的指示仍然存在。
有沒有什麼方法可以在新數據添加後重新應用排序?
編輯:如果這不是很容易,只要能夠擺脫那個灰色的顛倒或倒置的三角形就足夠好,所以很明顯數據沒有排序。
這應該做的刪除
Column.HeaderCell.SortGlyphDirection = SortOrder.None;
但是,如果你讀到這,你應該能夠提取您需要什麼?
你重新填充之前,請記下排序列,事後重新應用排序:你可能還需要保存當前選中行,否則當你重新填充它將會丟失。
int? index = null;
int firstDisplayedRowIndex = 0;
int sortedColumnIndex = -1;
SortOrder sortOrder = SortOrder.Ascending;
if (dgv.CurrentRow != null)
{
index = dgv.CurrentRow.Index;
firstDisplayedRowIndex = dgv.FirstDisplayedScrollingRowIndex;
if (dgv.SortedColumn != null)
{
sortedColumnIndex = dgv.SortedColumn.Index;
sortOrder = dgv.SortOrder;
}
}
// Repopulate grid...
if (index.HasValue)
{
if (sortedColumnIndex > -1)
{
switch (sortOrder)
{
case SortOrder.Ascending:
dgv.Sort(dgv.Columns[sortedColumnIndex], ListSortDirection.Ascending);
break;
case SortOrder.Descending:
dgv.Sort(dgv.Columns[sortedColumnIndex],
ListSortDirection.Descending);
break;
// SortOrder.None - or anthing else - do nothing
}
}
dgv.Rows[index.Value].Selected = true;
dgv.Rows[index.Value].Cells[0].Selected = true;
dgv.FirstDisplayedScrollingRowIndex = firstDisplayedRowIndex;
// Call any code that needs to know the selection might have changed
}
我最近有類似的情況。我創建了一個類來處理我所有的數據網格排序。 http://jspot.jerryhanel.com/2012/06/28/sort-your-databound-grid-effortlessly/ – Jerry