如何冻结第一行,当我点击列的标题排序在DataGridView

本文关键字:标题 排序 DataGridView 冻结 何冻结 一行 | 更新日期: 2023-09-27 18:03:28

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

如何冻结第一行,当我点击列的标题排序在DataGridView

DataGridViewSortCompare事件的SortCompare事件处理程序中,尝试以下操作:

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    if (e.RowIndex1 == 0)
    {
        e.Handled = true;
    }
    else
    {
        e.Handled = false;
    }
}

本质上,您要求的是能够仅对DataGridView的一部分进行排序。据我所知,没有简单或标准的方法来做到这一点,菲利普对这个问题的回应:在DataGridView中对选定的行进行排序。这并不意味着你不可能实现你想要的行为。

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

    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;
        }
    }

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