ComponentOne 利用ガイド
[026] SetupEditor イベント内で SetData メソッドでセルのテキストを変換しても、編集状態では変換されたテキストが表示されない
移行ガイド > 各種移行資料 > WinForms 移行情報 > FlexGrid for WinForms 移行情報 > [026] SetupEditor イベント内で SetData メソッドでセルのテキストを変換しても、編集状態では変換されたテキストが表示されない
変更バージョン 2.6.20101.515
カテゴリ 動作
対応策

詳細

旧バージョンでは、SetupEditor イベント内に、SetData メソッドを用いてセルのデータを変換する処理(例えば「.」をヌルで置換=「.」の削除)を実装した場合、そのセルが編集状態になったときに、変換後のテキストが表示されました。本バージョンでは、セルが編集状態になっても、変換後のテキストではなく元のデータが表示されます。

これは、グリッドに設定したテキストをエディタのテキストとして設定するタイミングが、SetupEditor イベントの「後」から SetupEditor イベントの「前」に変更されたためです。SetData メソッドは、エディタのテキストではなく、セルの元のデータを変換します。SetupEditor イベントの開始時には、エディタのテキストにすでに元のセルデータ(上述の例では「.」を含むテキスト)が割り当てられているので、この時点で SetData メソッドを実行しても、元のデータが変換されるだけで、エディタのテキストには反映されません。そのため、セルが編集状態になったときに「.」が削除されずに表示されます。

旧バージョンと同様の動作にするには、SetupEditor イベント内で、GetData メソッドを用いてグリッドのデータを取得し、ここから「.」を削除したものをエディタのテキストとして渡します。

// 修正前
private void C1FlexGrid1_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
  C1FlexGrid1.SetData(e.Row, e.Col, C1FlexGrid1.GetData(e.Row, e.Col).ToString().Replace(".", ""));
}

// 修正後
private void C1FlexGrid1_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
  if ((C1FlexGrid1.GetDataDisplay(e.Row, e.Col) != null))
  {
    TextBoxBase editor = C1FlexGrid1.Editor;
    editor.Text = C1FlexGrid1.GetData(e.Row, e.Col).ToString().Replace(".", "");
  }
}
' 修正前
Private Sub C1FlexGrid1_SetupEditor( sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.SetupEditor
  C1FlexGrid1.SetData(e.Row, e.Col, C1FlexGrid1.GetData(e.Row, e.Col).ToString().Replace(".", ""))
End Sub

' 修正後
Private Sub C1FlexGrid1_SetupEditor( sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.SetupEditor
  If (C1FlexGrid1.GetDataDisplay(e.Row, e.Col) <> Nothing) Then
    Dim editor As TextBoxBase = C1FlexGrid1.Editor
    editor.Text = C1FlexGrid1.GetData(e.Row, e.Col).ToString().Replace(".", "")
  End If
End Sub
関連トピック