作成日: 2023/04/26 最終更新日: 2023/04/26
文書種別
使用方法
詳細
FlexGrid.AllowDraggingプロパティをRowsやBothに設定しても、仕様上、複数行の移動はサポートされません。
ユーザー操作(マウスクリックなど)で複数行を選択し、移動させるには、BeforeDragRowイベントにて既定の動作をキャンセルし、行のMoveメソッドを使用して独自に行移動の処理を実装する必要があります。
(メモ)
データ連結モードでは、この方法を用いることはできませんので、ご了承ください。
連結モードの行移動については、以下のブログ記事を参照してください。
◇ブログ記事(英語)
Drag and Drop Rows in C1Flexgrid
以下に、簡単なサンプルコードを記載します。

◎サンプルコード(VB)
ユーザー操作(マウスクリックなど)で複数行を選択し、移動させるには、BeforeDragRowイベントにて既定の動作をキャンセルし、行のMoveメソッドを使用して独自に行移動の処理を実装する必要があります。
(メモ)
データ連結モードでは、この方法を用いることはできませんので、ご了承ください。
連結モードの行移動については、以下のブログ記事を参照してください。
◇ブログ記事(英語)
Drag and Drop Rows in C1Flexgrid
以下に、簡単なサンプルコードを記載します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With C1FlexGrid1
Text = .ProductVersion
.AllowDragging = C1.Win.C1FlexGrid.AllowDraggingEnum.Rows
.SelectionMode = SelectionModeEnum.ListBox
For i = 1 To .Rows.Count - 1
For j = 1 To .Cols.Count - 1
.Item(i, j) = $"R{i}C{j}"
Next
Next
End With
End Sub
Private Sub C1FlexGrid1_BeforeDragRow(sender As Object, e As DragRowColEventArgs) Handles C1FlexGrid1.BeforeDragRow
' 既定の動作のキャンセル
e.Cancel = True
' 独自の動作の実装
MoveSelectedRows(e.Row, e.Position)
End Sub
Private Sub MoveSelectedRows(fromRow As Integer, toRow As Integer)
' 選択された行の取得
Dim rows As New ArrayList()
For i = 1 To C1FlexGrid1.Rows.Count - 1
If C1FlexGrid1.Rows(i).Selected Then
C1FlexGrid1.Rows(i).Selected = False
rows.Add(C1FlexGrid1.Rows(i))
End If
Next
' 選択された行の移動
For i = 0 To rows.Count - 1
If fromRow > toRow Then
DirectCast(rows(i), Row).Move(toRow + i)
Else
DirectCast(rows(i), Row).Move(toRow)
End If
Next
End Sub
End Class
◎サンプルコード(C#)using System.Collections;
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
c1FlexGrid1.AllowDragging = C1.Win.C1FlexGrid.AllowDraggingEnum.Rows;
c1FlexGrid1.SelectionMode = SelectionModeEnum.ListBox;
for (int i = 1; i < c1FlexGrid1.Rows.Count; i++)
{
for (int j = 1; j < c1FlexGrid1.Cols.Count; j++)
{
c1FlexGrid1[i, j] = $"R{i}C{j}";
}
}
}
private void c1FlexGrid1_BeforeDragRow(object sender, DragRowColEventArgs e)
{
// 既定の動作のキャンセル
e.Cancel = true;
// 独自の動作の実装
MoveSelectedRows(e.Row, e.Position);
}
private void MoveSelectedRows(int fromRow, int toRow)
{
// 選択された行の取得
ArrayList rows = new ArrayList();
for (int i = 1; i < c1FlexGrid1.Rows.Count; i++)
{
if (c1FlexGrid1.Rows[i].Selected)
{
c1FlexGrid1.Rows[i].Selected = false;
rows.Add(c1FlexGrid1.Rows[i]);
}
}
// 選択された行の移動
for (int i = 0; i < rows.Count; i++)
{
if (fromRow > toRow)
{
((Row)rows[i]).Move(toRow + i);
}
else
{
((Row)rows[i]).Move(toRow);
}
}
}
}
}