1、在sorted事件中把排除行记录下来 ,sorted事件是排序完成时才触发的,并且早于ColumnHeaderMouseClick事件
private void dgvDateReport_Sorted(object sender, EventArgs e)
{
if (lastRow.Count <= 0)
{
dgvDateReport.Rows[0].Frozen = false; //解除冻结
dgvDateReport.Columns[3].Frozen = false;
string str = dgvDateReport.Rows[0].Cells[0].Value.ToString(); //取得行数据
int index;
if (str == "") //判断需要排除的行是否在第一行
{
index = 0; //判断需要排除的行在第一行
}
else
{
index = dgvDateReport.Rows.Count-1; //判断需要排除的行在最后一行
}
lastRow.Add(dgvDateReport.Rows[index]); //记录
dgvDateReport.Rows.RemoveAt(index); //删除
}
}
2、在ColumnHeaderMouseClick事件中把记录的排除行再添加到第一行
private void dgvDateReport_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex >= 0 && e.ColumnIndex < 4)
{
if (e.RowIndex >= 0 || dgvDateReport.Rows.Count == 0)
return;
if (lastRow.Count <= 0)
return;
dgvDateReport.Rows.Insert(0,lastRow[0]);
lastRow.Clear();
dgvDateReport.Rows[0].Frozen = true;
dgvDateReport.Columns[3].Frozen = true;
}
}
3、效果如图
4、列禁止自动排序
dgvDateReport.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
.