重新应用排序到DataGrid?

时间:2011-08-26 15:05:01

标签: c# winforms sorting datagridview

我有一个DataGridView。

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

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

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

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

2 个答案:

答案 0 :(得分:0)

这应该执行删除

Column.HeaderCell.SortGlyphDirection = SortOrder.None;

但是如果你读到这个,你应该能够提取你需要的东西吗?

http://msdn.microsoft.com/en-us/library/ms171608.aspx

答案 1 :(得分: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
}