単一の WinGrid で行のドラッグ アンド ドロップする方法

0 ユーザーが評価
この投稿には確認済みの回答があります。 0 返信 | 1 サポーター

トップ 10 投稿者 
女性
投稿 22
IG Employee

元記事 (英語): http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.aspx?ArticleID=10086

単一の WinGrid で行のドラッグ アンド ドロップする方法

 

対象バージョン:

UltraWinGrid (v6.3.20063, 7.1.20071, 7.2.20072, 7.3.20073)

 

記事の作成日付:
2007/11/02


更新日付:
2007/11/02

記事のタイプ:
操作手順



 

概要

UltraGrid には行をドラッグ アンド ドロップする機能があります。この記事は UltraGrid で行のドラッグ アンド ドロップを有効にする方法を紹介します。

 

手順

UltraGrid の AllowDrop プロパティを True に設定します。
C# の場合:

ultraGrid1.AllowDrop = true;

VB.Net の場合:

UltraGrid1.AllowDrop = True

次に、UltraGrid の SelectionDrag イベントを処理して、UltraGrid の DoDragDrop() メソッドを呼び出します。エンド ユーザーが行を選択してドラッグを始めるときに SelectionDrag イベントが発生します。

C# の場合:

private void ultraGrid1_SelectionDrag(object sender, CancelEventArgs e)
{
    ultraGrid1.DoDragDrop(ultraGrid1.Selected.Rows, DragDropEffects.Move);
}

VB.Net の場合:

Private Sub UltraGrid1_SelectionDrag(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles UltraGrid1.SelectionDrag
    UltraGrid1.DoDragDrop(UltraGrid1.Selected.Rows, DragDropEffects.Move)
End Sub

ドラッグ効果を設定し、スクロールを有効にするために UltraGrid の DragOver イベントを処理します。UltraGrid では行をどこへでもドラッグできます。
C# の場合:

private void ultraGrid1_DragOver(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
    UltraGrid grid = sender as UltraGrid;
    Point pointInGridCoords = grid.PointToClient(new Point(e.X,e.Y));
    if (pointInGridCoords.Y < 20)
        // 上へスクロール
        this.ultraGrid1.ActiveRowScrollRegion.Scroll(RowScrollAction.LineUp);
    else if (pointInGridCoords.Y > grid.Height - 20)
        // 下へスクロール
        this.ultraGrid1.ActiveRowScrollRegion.Scroll(RowScrollAction.LineDown);
}

VB.Net の場合:

Private Sub UltraGrid1_DragOver(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles UltraGrid1.DragOver
    e.Effect = DragDropEffects.Move
    Dim grid As UltraGrid = TryCast(sender, UltraGrid)
    Dim pointInGridCoords As Point = grid.PointToClient(New Point(e.X, e.Y))
    
    If pointInGridCoords.Y < 20 Then
        '上へスクロール
        Me.UltraGrid1.ActiveRowScrollRegion.Scroll(RowScrollAction.LineUp)
    ElseIf pointInGridCoords.Y > grid.Height - 20 Then
        '下へスクロール
        Me.UltraGrid1.ActiveRowScrollRegion.Scroll(RowScrollAction.LineDown)
    End If
End Sub

UltraGrid の DragDrop イベントを処理して、グリッドで行をドロップする位置を取得します。位置を取得したら、行をそこに移動できます。

C# の場合:

private void ultraGrid1_DragDrop(object sender, DragEventArgs e)
{
    int dropIndex;

    // グリッドで行をドロップする位置を取得します
    //行のグリッド座標 (ドロップ領域) を取得します
    UIElement uieOver = ultraGrid1.DisplayLayout.UIElement.ElementFromPoint(ultraGrid1.PointToClient(new Point(e.X, e.Y)));

    //ドロップ領域の行 / ドラッグされた行をドロップする位置を取得します
    UltraGridRow ugrOver = uieOver.GetContext(typeof(UltraGridRow), true) as UltraGridRow;
    if (ugrOver != null)
    {
        dropIndex = ugrOver.Index;    //グリッドのドロップ領域のインデックス / 位置
    
        //ドラッグされた行を取得します
        SelectedRowsCollection SelRows (SelectedRowsCollection)e.Data.GetData (typeof(SelectedRowsCollection)) as SelectedRowsCollection;
        //選択された行の数を取得して、dropIndex にドロップします
        foreach (UltraGridRow aRow in SelRows)
        {
            //選択された行をドロップ領域に移動します
            ultraGrid1.Rows.Move(aRow, dropIndex);
        }
    }
}

VB.Net の場合:

Private Sub UltraGrid1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles UltraGrid1.DragDrop
    Dim dropIndex As Integer

    'グリッドで行をドロップする位置を取得します

    '行のグリッド座標 (ドロップ領域) を取得します
    Dim uieOver As UIElement = UltraGrid1.DisplayLayout.UIElement.ElementFromPoint(UltraGrid1.PointToClient(New Point(e.X, e.Y)))

    'ドロップ領域の行 / ドラッグされた行をドロップする位置を取得します
    Dim ugrOver As UltraGridRow = TryCast(uieOver.GetContext(GetType(UltraGridRow), True), UltraGridRow)

    If ugrOver IsNot Nothing Then
        dropIndex = ugrOver.Index    'グリッドのドロップ領域のインデックス / 位置
        
        'ドラッグされた行を取得します
        Dim SelRows As SelectedRowsCollection = TryCast(DirectCast(e.Data.GetData(GetType(SelectedRowsCollection)), SelectedRowsCollection), SelectedRowsCollection)
        '選択された行の数を取得して、dropIndex にドロップします

        For Each aRow As UltraGridRow In SelRows
            '選択された行をドロップ領域に移動します
            UltraGrid1.Rows.Move(aRow, dropIndex)
        Next
    End If
End Sub

 

サンプル

wingrid_cs_73_clr2_drag_drop_rows.zip
 C#: WinGrid で行をドラッグ アンド ドロップする方法

wingrid_vb_73_clr2_drag_drop_rows.zip
VB.NET: WinGrid で行をドラッグ アンド ドロップする方法

 

ページ 1 / 1 (1 項目) | RSS
Infragistics Japan
インフラジスティックス ジャパン