0

使用自定义 SortComparer 时如何冻结 Datagridview 中的第一行?没有 SortComparerrow[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;
        }
4

1 回答 1

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
       }
  }

或者您可以通过检查该行是否被冻结来使其更加精美:

编辑以下内容不起作用,因为由于某种原因,Row 的 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 作为相等的行将根据它们的当前位置进行排序。

于 2012-08-06T19:07:00.653 回答