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