元記事 (英語): http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.aspx?ArticleID=10086
対象バージョン:
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); }
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); }
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); } } }
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 で行をドラッグ アンド ドロップする方法