如何在使用自定义SortComparer时冻结Datagridview中的第一行?
没有SortComparer row[x].froozen = true;
就可以做到。
但是使用SortComparer它不起作用
这是我的SortComparer代码:
DataGridView dg = (DataGridView)sender;
if (e.Column.Index == 0)
{
e.SortResult = System.String.Compare(e.CellValue1.ToString(), e.CellValue2.ToString());
if (e.SortResult == 0)
{
e.SortResult = System.String.Compare(
dg.Rows[e.RowIndex1].Cells[1].Value.ToString(),
dg.Rows[e.RowIndex2].Cells[1].Value.ToString());
}
e.Handled = true;
}
else if (e.Column.Index == 1)
{
e.SortResult = System.String.Compare(e.CellValue1.ToString(), e.CellValue2.ToString());
if (e.SortResult == 0)
{
e.SortResult = System.String.Compare(
dg.Rows[e.RowIndex1].Cells[0].Value.ToString(),
dg.Rows[e.RowIndex2].Cells[0].Value.ToString());
}
e.Handled = true;
}
答案 0 :(得分:1)
您可以扩展SortComparer以检查第一行索引是否是顶行。如果是,请设置e.SortResult = 0
或运行您要排序的任何代码。
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
DataGridView dg = (DataGridView)sender;
if (e.RowIndex1 == 0) {
e.SortResult = 0;
e.Handled = true;
} else {
// rest of your comparison code
}
}
或者你可以通过检查行是否被冻结来使它变得更加花哨:
编辑以下内容不起作用,因为默认情况下,由于某种原因,行的Frozen属性设置为false
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
DataGridView dg = (DataGridView)sender;
if (dg.Rows[e.RowIndex1].Frozen) {
e.SortResult = -1;
e.Handled = true;
} else {
// rest of your comparison code
}
}
编辑 e.SortResult = 0
代替-1,因为相等的行将根据其当前位置进行排序。