Copyright © GrapeCity inc. All rights reserved.
True DBGrid for WinForms
任意のドロップダウンコントロールを使用する
セルの編集テクニック > ドロップダウンコントロール > 任意のドロップダウンコントロールを使用する

通常、C1TrueDBGrid のデフォルトの編集動作は、ほとんどのアプリケーションで十分な機能を果たします。しかし、必要に応じて、この動作をカスタマイズすることもできます。便利なテクニックの1つは、ドロップダウンリスト、コンボボックス、または他の C1TrueDBGrid コントロールを使用して、有効な値のリストから値を選択できるようにすることです。TrueDBGridでは、事実上任意の .NET コントロールまたはサードパーティのコントロールを使用して、簡単にこれを実行できます。以下に一般的なアプローチを示します。また、実用的な例はチュートリアル9: 任意のドロップダウンコントロールをグリッドセルに結び付けるにあります。

一般に、C1TrueDBGrid の標準エディタの代わりにドロップダウンリストまたはコンボボックスを表示するには、次の手順に従います。

  1. ユーザーがセルを編集するたびに、C1TrueDBGridBeforeColEdit イベントを発生させます。デフォルトの編集処理を上書きするには、Cancel 引数を True に設定することで、C1TrueDBGrid のデフォルトエディタをキャンセルします。また、代わりの編集コントロールを表示するためのコードを BeforeColEdit に置きます。通常は、グリッドと同じフォーム上に代わりの編集コントロールやドロップダウンを配置し、必要があるまで非表示にしておきます。
  2. BeforeColEdit が発生した場合は、編集対象のセルの正確な座標を決定するために、5つのプロパティと1つのメソッドを使用できます。これらのプロパティは、Left (グリッドと列)、Top (グリッドと列)、CellTop (複数ライン表示の列のみ)、Width (列のみ)、およびRowHeight(グリッドのみ)です。メソッドは RowTop (グリッドのみ)です。これらのプロパティやメソッドを使用すると、独自の編集コントロールやドロップダウンをグリッドセルの位置に基づいて配置できます。たとえば、次のコードを使用して、ListBox コントロールをセルの右に配置し、セルの上の境界線に揃えることができます。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Private Sub C1TrueDBGrid1_BeforeColEdit(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) Handles C1TrueDBGrid1.BeforeColEdit
        Dim r As Rectangle = Me.C1TrueDBGrid1.Splits(0).GetCellBounds(Me.C1TrueDBGrid1.Row, e.ColIndex)
        r = Me.C1TrueDBGrid1.RectangleToScreen(r)
        r = Me.RectangleToClient(r)
        Me.ListBox1.Left = r.Left
        Me.ListBox1.Top = r.Bottom
    End Sub
    

    C#コードの書き方

    C#
    コードのコピー
    private void c1TrueDBGrid1_BeforeColEdit(object sender, C1.Win.C1TrueDBGrid.BeforeColEditEventArgs e) 
    {
        Rectangle r = this.c1TrueDBGrid1.Splits[0].GetCellBounds(this.c1TrueDBGrid1.Row, e.ColIndex);
        r = this.c1TrueDBGrid1.RectangleToScreen(r);
        r = this.RectangleToClient(r);
        this.ListBox1.Left = r.Left;
        this.ListBox1.Top = r.Bottom;
    }
    
  3. 選択された値を編集された列のText  プロパティまたは  Value プロパティに割り当てることによって編集処理を完了するコードをドロップダウンまたはコンボボックスに置く必要があります。

ただし、グリッドの MarqueeStyle プロパティが 6 - MarqueeEnum.FloatingEditorの値(デフォルト)に設定されている場合、この方法は使用できません。フローティングエディタマーキーが使用されている場合は、ユーザーがセルを変更するまで BeforeColEdit イベントが発生しません。しかし、次の項で説明するように、組み込み列ボタン機能を使ってドロップダウンをアクティブにする方法があります。

他のMarqueeStyle  設定については、現在の行またはセルを強調表示するを参照してください。グリッドセルから ListBox コントロールをドロップダウンする例は、チュートリアル9: 任意のドロップダウンコントロールをグリッドセルに結び付けるにあります。