我有一个datagridview,我正在寻找排序。一列是“页面”,长度为2-3位。我有另一个名为“Item”的列,它是1到3之间的数字。我正在尝试按页面排序数据,首先是页面,然后是项目:
(实施例)
Page 01, item 1
Page 01, item 2
Page 02, item 2
Page 02, item 3
答案 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排序)。只需找出用户正在排序的列,当前排序顺序,反之,然后先对辅助列进行排序,然后对主要列进行排序。