我有一个数据视图,我希望排序。其中一列标题为"Page“,长度为2-3位数字。我有另一个名为"Item“的列,它是一个介于1和3之间的数字。我尝试按这两个列对数据进行排序,首先是页面,然后是项目:
(示例)
Page 01, item 1
Page 01, item 2
Page 02, item 2
Page 02, item 3发布于 2012-07-09 22:33:40
我知道这篇文章有点老了,但我来这里是为了寻找答案,但没有其他人回应,所以我想我应该在这里放一个。
您需要做的第一件事是禁用标题上的自动排序。在我将数据源绑定到dgv之后,我调用了一个disableSort方法,实际上我发现通过将排序模式设置为编程,这个方法工作得最好
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排序)。只要找出用户正在对哪一列进行排序,它当前的sortorder是什么,采取相反的方法,然后首先对次列进行排序,然后对主要列进行排序。
https://stackoverflow.com/questions/8953550
复制相似问题