当我在DataGridView中单击列标题以进行排序时,如何冻结第一行?

时间:2016-08-22 11:39:39

标签: c# datagridview desktop-application datagridviewcolumn

我有一个桌面应用程序,我在表单上使用DataGridView。我冻结了第一排。但是当我在DataGridView中单击列的标题时,第一行的位置也在变化。当我排序时,如何忽略第一行。

3 个答案:

答案 0 :(得分:0)

基本上,你要问的是能够只对DataGridView的一部分进行排序。据我所知,没有简单或标准的方法可以做到这一点,菲利普对这个问题的回答也是如此:Sorting selected rows in DataGridView。这并不意味着无法实现您想要的行为。

Filip提供了一个实现,在这个question中,Justin提供了您需要稍微修改的代码,但这可能符合您的需求。这个问题询问如何在DataGridView中向上或向下移动一行,但我认为您可以修改他的实现,以便在排序后将要保持静态的行一直移动到顶部。根据您要排序的行数,第一行可能会消失并重新出现。但是,如果您的数据集相对较小,我无法想象第一行的短暂闪存被分类到某个随机位置然后再添加到顶部会导致任何重大问题。

答案 1 :(得分:0)

SortCompare的{​​{1}}事件的SortCompare事件处理程序中,试试这个:

DataGridView

答案 2 :(得分:0)

    private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
    {
        int so = 1;
        if (dataGridView1.SortOrder == SortOrder.Ascending)
        {
            so = -1;
        }
        if (e.RowIndex1 == 0 )
        {
            e.SortResult = so;
            e.Handled = true;
        }
        if (e.RowIndex2 == 0)
        {
            e.SortResult = -so;
            e.Handled = true;
        }
    }

此代码通过相应地设置第一行的排序结果,将第一行始终置于排序列表的顶部。