Sorting 如何在dataGridView中对辅助列进行排序?

Sorting 如何在dataGridView中对辅助列进行排序?,sorting,datagridview,Sorting,Datagridview,我有一个datagridview,我正在寻找排序。一列标题为“第页”,长度为2-3位数字。我还有一个列叫做“Item”,它是一个介于1和3之间的数字。我尝试按两种方式对数据进行排序,第一页,然后是第项: (示例) 我知道这篇文章有点老了,但我来这里寻找答案,没有其他人回应,所以我想我应该在这里贴一个 您需要做的第一件事是禁用标题上的自动排序。在我将数据源绑定到dgv之后,我调用了disableSort方法,实际上我发现将sort模式设置为Programminal最有效 private v

我有一个datagridview,我正在寻找排序。一列标题为“第页”,长度为2-3位数字。我还有一个列叫做“Item”,它是一个介于1和3之间的数字。我尝试按两种方式对数据进行排序,第一页,然后是第项:

(示例)


我知道这篇文章有点老了,但我来这里寻找答案,没有其他人回应,所以我想我应该在这里贴一个

您需要做的第一件事是禁用标题上的自动排序。在我将数据源绑定到dgv之后,我调用了disableSort方法,实际上我发现将sort模式设置为Programminal最有效

    private void disableSort()
    {
        foreach(DataGridViewColumn dc in dataGridView2.Columns)
        {
            dc.SortMode = DataGridViewColumnSortMode.Programmatic;
        }
    }
然后我加入了dataGrid上的CellMouseDown事件

        private void dataGridView2_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex == -1)
        {
            int rIdx = dataGridView2.SelectedCells[0].RowIndex;
            seq = dataGridView2.Rows[rIdx].Cells["SequenceNo"].Value.ToString();

            int selectedColumnIdx = e.ColumnIndex;
            ListSortDirection direction;

            if (dataGridView2.SortedColumn == dataGridView2.Columns[selectedColumnIdx])
            {
                if (dataGridView2.SortOrder == SortOrder.Ascending)
                {
                    direction = ListSortDirection.Descending;
                }
                else
                {
                    direction = ListSortDirection.Ascending;
                }
            }
            else
            {
                direction = ListSortDirection.Ascending;
            }

            this.dataGridView2.Sort(this.dataGridView2.Columns["SequenceNo"], ListSortDirection.Ascending);
            this.dataGridView2.Sort(this.dataGridView2.Columns[selectedColumnIdx], direction);
        }
如果通过ColumnHeaderMouseClick事件进入,则可以跳过我的行索引检查

我使用SequenceNumber作为二级排序(用户选择要排序的列后,他们希望它按SequenceNumber排序)。只需找出用户正在排序的列,其当前排序器是什么,取相反的值,然后先对辅助列排序,然后对主列排序

        private void dataGridView2_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.RowIndex == -1)
        {
            int rIdx = dataGridView2.SelectedCells[0].RowIndex;
            seq = dataGridView2.Rows[rIdx].Cells["SequenceNo"].Value.ToString();

            int selectedColumnIdx = e.ColumnIndex;
            ListSortDirection direction;

            if (dataGridView2.SortedColumn == dataGridView2.Columns[selectedColumnIdx])
            {
                if (dataGridView2.SortOrder == SortOrder.Ascending)
                {
                    direction = ListSortDirection.Descending;
                }
                else
                {
                    direction = ListSortDirection.Ascending;
                }
            }
            else
            {
                direction = ListSortDirection.Ascending;
            }

            this.dataGridView2.Sort(this.dataGridView2.Columns["SequenceNo"], ListSortDirection.Ascending);
            this.dataGridView2.Sort(this.dataGridView2.Columns[selectedColumnIdx], direction);
        }