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

时间:2012-01-21 14:02:17

标签: sorting datagridview

我有一个datagridview,我正在寻找排序。一列是“页面”,长度为2-3位。我有另一个名为“Item”的列,它是1到3之间的数字。我正在尝试按页面排序数据,首先是页面,然后是项目:

(实施例)

Page 01, item 1
Page 01, item 2
Page 02, item 2
Page 02, item 3

1 个答案:

答案 0 :(得分:0)

我知道这篇文章有点老了,但是我来到这里寻找答案而没有其他人做出回应,所以我想我会在这里放一个。

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

    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事件,你可以跳过我的RowIndex检查

我正在使用SequenceNumber作为我的辅助排序(在用户选择要排序的列之后,他们希望它按sequenceNumber排序)。只需找出用户正在排序的列,当前排序顺序,反之,然后先对辅助列进行排序,然后对主要列进行排序。