2011-08-26 112 views
1

我有一个DataGridView。重新应用排序到DataGrid?

我可以单击列标题来按照我点击的任何列标题对数据进行排序。

我有一些功能,清除DataGridView,并重新填充数据。我遇到的问题是,即使数据未按该列排序,因为它只是加载到DataGridView中,所以在特定列(灰色倒置或倒置三角形)中排序的指示仍然存在。

有没有什么方法可以在新数据添加后重新应用排序?

编辑:如果这不是很容易,只要能够摆脱那个灰色的颠倒或倒置的三角形就足够好,所以很明显数据没有排序。

+0

我最近有类似的情况。我创建了一个类来处理我所有的数据网格排序。 http://jspot.jerryhanel.com/2012/06/28/sort-your-databound-grid-effortlessly/ – Jerry

回答

0

你重新填充之前,请记下排序列,事后重新应用排序:你可能还需要保存当前选中行,否则当你重新填充它将会丢失。

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 
}