True DBGrid for WinForms
カスタムのグリッドエディタ
エンドユーザーの操作 > カスタムのグリッドエディタ

以下のセクションでは、カスタム グリッド エディタを作成および使用する方法について説明します。

カスタムエディタの使用

組み込みエディタでは多くの柔軟性と機能が提供されていますが、場合によっては外部コントロールを特別なエディタとして使用できます。たとえば、数値入力用ドロップダウン電卓を提供する C1NumericEdit コントロール、複数列リストから選択するためのエディタ、またはビジネスオブジェクトの編集用に自分で記述した特別なコントロールを使用できます。

注意C1NumericEdit コントロールは Input for WinForms コントロールの1つです。C1NumericEdit コントロールの詳細については、Input for WinForms のマニュアルから入手可能)を参照してください。

基本の Control クラスから派生するコントロールはすべて、基本グリッドエディタとして使用できます。IC1EmbeddedEditor インターフェースを実装するコントロールは、グリッドとのより優れた統合とより高度な機能を提供できます。IC1EmbeddedEditor インターフェースの詳細については、Editor プロパティを参照してください。

コントロールをカスタムエディタとして使用するには、Editor プロパティを使用し、このコントロールのインスタンスをグリッド列に関連付けるだけで済みます。コードでこれを行うには、Editor プロパティを使用します。それ以降は、コントロールはグリッドによって自動的に使用されます。

たとえば、C1NumericEdit コントロールをグリッドエディタとして使用するには、以下の手順に従います。

  1. C1TrueDBGrid コントロールと C1NumericInput コントロールをフォームに追加します。
  2. C1NumericInput コントロールの場合、プロパティウィンドウ内か、Form_Load イベントに次のコードを追加することで、BorderStyle プロパティを None に、Visible プロパティを False に設定します。
    C#
    コードのコピー
    // カスタムエディタをセットアップします。
    this.c1NumericEdit1.BorderStyle = BorderStyle.None;
    this.c1NumericEdit1.Visible = false;
    
  3. Form_Load イベントで、カスタムエディタをグリッド列に割り当てます。
    C#
    コードのコピー
    private void Form_Load(object sender, EventArgs e)
    {
     
        // カスタムエディタをグリッドに割り当てます。
        this.c1TrueDBGrid1.Columns[0].Editor = this.c1NumericEdit1;
    }
    

プロジェクトを実行し、最初の列のいくつかの値を編集します。グリッドが C1NumericEdit コントロールをどのように配置して初期化してセル値を編集できるようにするかに注意してください。セルの編集を完了したら、別のセルをクリックするか、[Tab]キーを押して次のセルに移動します。新しい値がこのセルに適用されていることに注意してください。

Creating Custom Editors

Any control that derives from the Control base class can be used as a grid editor. This is possible because the grid knows enough about the base class to access properties such as Text and Bounds, and events such as Leave and TextChanged. In many cases this level of support is adequate.

In some cases, however, you may want to use controls that do not follow the base class that closely. For example, a DateTimePicker control has a Value property that should be used to retrieve the edited value instead of Text. In these cases, you can implement one or more methods in the IC1EmbeddedEditor interface to override the default behavior. For example, all controls in the C1Input library support IC1EmbeddedEditor and therefore integrate closely with C1TrueDBGrid (and also C1FlexGrid).

The IC1EmbeddedEditor interface is fairly simple, and because the grid binds to it using late binding, you do not even have to implement all its members. Only implement the ones that make sense to your editor control.

The interface does provide enough flexibility to allow virtually any control to be used as a grid editor. You can even use UITypeEditor classes as grid editors. To do this, you need a wrapper class that:

  1. Derives from Control (UITypeEditor does not).
  2. Implements the IC1EmbeddedEditor interface.
  3. Encapsulates the appropriate UITypeEditor.
Note: For a complete sample using this wrapper class, see the CustomEditors sample installed with Winforms Edition.
Using the UITypeEditor wrapper class, you can use any UITypeEditors with the C1TrueDBGrid. .NET provides several UITypeEditors for editing colors, fonts, file names, and so on. You can also write your own UITypeEditors, in some cases that is easier than writing a control.