ComponentOne 利用ガイド
[010] データ行がなくても、列ヘッダクリックで BeforeSort/AfterSort イベントが発生する
移行ガイド > 各種移行資料 > WinForms 移行情報 > FlexGrid for WinForms 移行情報 > [010] データ行がなくても、列ヘッダクリックで BeforeSort/AfterSort イベントが発生する
変更バージョン 2.5.20061.236
カテゴリ ソート
対応策

詳細

旧バージョンでは、データ行が1件もない状態で列ヘッダをクリックすると、BeforeSort/AfterSort イベントは発生しませんでした。本バージョンでは、同じ条件下で BeforeSort/AfterSort イベントが発生します。

これは、例えば、フィルタリング後に該当レコードがなくデータが表示されていなくても、ソートを実行したいといったケースが考えられます。この場合、データソースにデータが追加されたときに、後からソートを実行させることができるため、ソートを適用する意味があります。

旧バージョンと同様の動作にするには、表示されているデータ行があるかどうかを調べ、ない場合にはこれらのイベント内での処理をスキップしてください。

private void fg_BeforeSort(object sender, SortColEventArgs e)
{
  int rv = 0;
  for (int rd = 1; rd < fg.Rows.Count; rd++)
  {
    if (fg.Rows[rd].Visible == true) rv = rv + 1;
  }
  if (rv > 0) MessageBox.Show("BeforeSort Event");
}

private void fg_AfterSort(object sender, SortColEventArgs e)
{
  int rv = 0;
  for (int rd = 1; rd < fg.Rows.Count; rd++)
  {
    if (fg.Rows[rd].Visible == true) rv = rv + 1;
  }
  if (rv > 0) MessageBox.Show("AfterSort Event");
}
Private Sub fg_BeforeSort(sender As Object, e As C1.Win.C1FlexGrid.SortColEventArgs) Handles fg.BeforeSort
  Dim rv As Integer = 0
  For rd As Integer = 1 To fg.Rows.Count - 1
    If fg.Rows(rd).Visible = True Then
      rv = rv + 1
    End If
  Next
  If rv > 0 Then
    MessageBox.Show("BeforeSort Event")
  End If
End Sub

Private Sub fg_AfterSort(sender As Object, e As C1.Win.C1FlexGrid.SortColEventArgs) Handles fg.AfterSort
  Dim rv As Integer = 0
  For rd As Integer = 1 To fg.Rows.Count - 1
    If fg.Rows(rd).Visible = True Then
      rv = rv + 1
    End If
  Next
  If rv > 0 Then
    MessageBox.Show("AfterSort Event")
  End If
End Sub
関連トピック