バージョン

列の移動と交換

WinGrid には、列を移動、交換できる組み込み機能があります。デフォルトで、列の移動は行レイアウト モード以外では有効です。行レイアウト モードでは、AllowColMoving を WithinBand に設定して明示的に列の移動を有効にする必要があります。列の交換はデフォルトで有効ではありません。これを有効にするには、AllowColSwapping を WithinBand に設定しなければなりません。

Note
注:

ここでは少なくとも 1 行のデータを含むバウンド グリッドがフォーム上にあるものとします。必要であれば、上記のプロパティも設定してください。

ランタイムに列を移動するには、列を選択し、クリックして新しい場所へドラッグします。

列を移動するには:

  1. プログラムを実行します。

  2. 列を選択するために列ヘッダをクリックします。列ヘッダをクリックしてドラッグすると、複数の列を選択できます。

  3. ひとつ以上の列を選択した後、再度列ヘッダをクリックしてマウスをドラッグします。マウスを列ヘッダの上で動かしていくと、マウスボタンを離したときに列が配置される場所を赤色の矢印が示します。

  4. マウス ボタンを離して列を新しい場所にドロップします。

  5. 次のスナップショットは列が移動している動作を示しています。

    WinGrid Move And Swap Columns And Groups 02.png

列を交換するには:

列の交換機能によって 2 つの列の位置を交換できます。デフォルトで、列の交換は無効になっています。

  1. コードの記述を開始する前にコード ビハインドに使用/インポートのディレクティブを配置します。そうすれば、メンバは完全に記述された名前を常に入力する必要がなくなります。

    Visual Basic の場合:

    Imports Infragistics.Win.UltraWinGrid

    C# の場合:

    using Infragistics.Win.UltraWinGrid;
  2. 列の交換を有効にするには、まず override オブジェクトの AllowColSwapping プロパティを設定する必要があります。これは通常 InitializeLayout イベントで行います。

    Visual Basic の場合:

    Me.UltraGrid1.DisplayLayout.Override.AllowColSwapping = _
        AllowColSwapping.WithinBand

    C# の場合: this.ultraGrid1.DisplayLayout.Override.AllowColSwapping = AllowColSwapping.WithinBand;

  3. プログラムが実行されると、各行の列ヘッダがドロップダウン矢印を表示します。列を交換するには、ドロップダウン矢印をドロップし、交換対象の列を選択します。

  4. リストから項目が選択されるとすぐに、2 つの列がその位置を交換します。

  5. 次のスナップショットは交換ドロップダウンを示しています。どの列ヘッダにも右側に小さなドロップダウン矢印があるので、注意してください。

    WinGrid Move and Swap Columns 01.png

グループの移動および交換

グリッド内で列グループを定義していた場合、列グループは列とまったく同じ方法で移動および交換できます。AllowGroupMoving プロパティと AllowGroupSwapping プロパティを適切に設定する必要があります。次いで、列のヘッダではなく、グループのヘッダを選択して上記と同じように進めます。なお、グループを選択すると、自動的にそのグループ内の列はすべて選択されます。

WinGrid Specify Fixed Columns 01.png

ColPosChanged イベント

UI を使用して列を移動または交換すると、BeforeColPosChanged および AfterColPosChanged イベントが発生します。同様に、UltraGridGroup を移動/交換すると、BeforeGroupPosChanged および AfterGroupPosChanged イベントが発生します。

この相互作用をリッスンするには、ColumnPosChangedTypePosChangedType になることをトラップします。次のコードに示すように、イベント引数に Moved または Swapped を追加します。

C# の場合:

private void UltraGrid1_AfterColPosChanged(object sender, AfterColPosChangedEventArgs e)
{
    bool hasMovedChanged = (e.ColumnPosChangedType & PosChangedType.Moved) == PosChangedType.Moved;
    if(hasMovedChanged)
    {
        //コードを追加
    }
}

Visual Basic の場合:

Private Sub UltraGrid1_AfterColPosChanged(sender As Object, e As AfterColPosChangedEventArgs)
    Dim hasMovedChanged As Boolean = (e.ColumnPosChangedType And PosChangedType.Moved) = PosChangedType.Moved
    If hasMovedChanged Then
        'コードを追加
    End If
End Sub