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

または、行がフリーズしているかどうかを確認することで、より凝ったものにすることができます。

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

編集等しい行は-1ではなく、現在のe.SortResult = 0位置に基づいて並べ替えられます。

于 2012-08-06T19:07:00.653 に答える