DevExpress 17.2.7
我尝试在网格内移动一行
元素“用户控件”位于“ gridControl1”。
代码包含事件:
-“ gridView1_MouseDown”;
-“ gridView1_MouseMove”;
-“ gridControl1_DragOver”;
-“ gridControl1_DragDrop”。
事件“ gridView1_MouseDown”,“ gridView1_MouseMove”起作用。
事件“ gridControl1_DragOver”,“ gridControl1_DragDrop”不起作用。
换句话说,他们甚至没有反应。
如何使“ gridControl1_DragOver”,“ gridControl1_DragDrop”事件起作用?
public partial class Frm10UC : UserControl
{
#region *** Переменные
// *** Переменные
ConectDB conectDB;
#region Перетаскивание
#region *** Сортировка
const string OrderFieldName = "sorting";
#endregion **
#endregion
#endregion *** Переменные
public Frm10UC()
{
InitializeComponent();
}
private void Frm10UC_Load(object sender, EventArgs e)
{
// Подключение к БД
// conectDB = new ConectDB(Convert.ToInt32(aIncement));
conectDB = new ConectDB();
conectDB.connect();
// gridControl. Заполнение данными
gridControl1.DataSource = conectDB.dt;
gridView1.BestFitColumns();
// Строка. Добавить "Новую запись"
// Отображение строки нового элемента для добавления строк в представление.
gridView1.OptionsView.NewItemRowPosition = NewItemRowPosition.Top; // Available modes: Top, Bottom, None (// Доступные режимы: сверху, снизу, нет)
// Сортировка
// SortData();
#region *** Сортировка
gridView1.PopulateColumns(); // Создает столбцы сетки/поля карты для полей в связанном источнике данных View.
gridView1.Columns[OrderFieldName].SortOrder = DevExpress.Data.ColumnSortOrder.Ascending; //Сортировка. "Ascending" - по возрастанию
gridView1.OptionsCustomization.AllowSort = false; // Получает или задает значение, определяющее, могут ли конечные пользователи применять сортировку данных .
gridView1.OptionsView.ShowGroupPanel = false; // Возвращает или задает значение, определяющее, является ли панель группы видимой.
#endregion *** Сортировка
}
#region *** События
GridHitInfo downHitInfo = null; // Содержит информацию о конкретной точке в виде сетки .
// https://documentation.devexpress.com/WindowsForms/DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo.members
private void gridView1_MouseDown(object sender, MouseEventArgs e)
{
GridView view = sender as GridView;
downHitInfo = null;
GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));
if (Control.ModifierKeys != Keys.None)
return;
if (e.Button == MouseButtons.Left && hitInfo.InRow && hitInfo.RowHandle != GridControl.NewItemRowHandle)
downHitInfo = hitInfo;
}
private void gridView1_MouseMove(object sender, MouseEventArgs e)
{
GridView view = sender as GridView;
if (e.Button == MouseButtons.Left && downHitInfo != null)
{
Size dragSize = SystemInformation.DragSize;
Rectangle dragRect = new Rectangle(new Point(downHitInfo.HitPoint.X - dragSize.Width / 2,
downHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);
if (!dragRect.Contains(new Point(e.X, e.Y)))
{
view.GridControl.DoDragDrop(downHitInfo, DragDropEffects.All);
downHitInfo = null;
}
}
}
private void gridControl1_DragOver(object sender, DragEventArgs e) // когда объект перетаскивается по границам элемента управления;
{
if (e.Data.GetDataPresent(typeof(GridHitInfo)))
{
GridHitInfo downHitInfo = e.Data.GetData(typeof(GridHitInfo)) as GridHitInfo;
if (downHitInfo == null)
return;
GridControl grid = sender as GridControl;
GridView view = grid.MainView as GridView;
GridHitInfo hitInfo = view.CalcHitInfo(grid.PointToClient(new Point(e.X, e.Y)));
if (hitInfo.InRow && hitInfo.RowHandle != downHitInfo.RowHandle && hitInfo.RowHandle != GridControl.NewItemRowHandle)
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
}
private void gridControl1_DragDrop(object sender, DragEventArgs e) //когда операция перетаскивания завершена;
{
GridControl grid = sender as GridControl;
GridView view = grid.MainView as GridView;
GridHitInfo srcHitInfo = e.Data.GetData(typeof(GridHitInfo)) as GridHitInfo;
GridHitInfo hitInfo = view.CalcHitInfo(grid.PointToClient(new Point(e.X, e.Y)));
int sourceRow = srcHitInfo.RowHandle;
int targetRow = hitInfo.RowHandle;
MoveRow(sourceRow, targetRow);
}
private void MoveRow(int sourceRow, int targetRow)
{
if (sourceRow == targetRow)
return;
GridView view = gridView1;
DataRow row0 = null;
DataRow row1 = null;
DataRow row2 = null;
decimal val1 = 0;
decimal val2 = 0;
if (targetRow == sourceRow + 1)
{
row1 = view.GetDataRow(sourceRow);
row2 = view.GetDataRow(targetRow);
val1 = (decimal)row1[OrderFieldName];
val2 = (decimal)row2[OrderFieldName];
row1[OrderFieldName] = val2;
row2[OrderFieldName] = val1;
view.FocusedRowHandle = sourceRow + 1;
return;
}
if (sourceRow == targetRow + 1)
{
row1 = view.GetDataRow(sourceRow);
row2 = view.GetDataRow(targetRow);
val1 = (decimal)row1[OrderFieldName];
val2 = (decimal)row2[OrderFieldName];
row1[OrderFieldName] = val2;
row2[OrderFieldName] = val1;
view.FocusedRowHandle = sourceRow - 1;
return;
}
row0 = view.GetDataRow(targetRow - 1);
row1 = view.GetDataRow(targetRow);
row2 = view.GetDataRow(targetRow + 1);
DataRow dragRow = view.GetDataRow(sourceRow);
val1 = (decimal)row1[OrderFieldName];
if (row2 == null)
dragRow[OrderFieldName] = val1 + 1;
else
{
val2 = (decimal)row2[OrderFieldName];
if (row0 == null)
dragRow[OrderFieldName] = val1 - 1;
else
dragRow[OrderFieldName] = (val1 + val2) / 2;
}
}
#endregion *** События
}
答案 0 :(得分:1)
您是否已将GridView控件的 AllowDrop 属性设置为 true ?
没有此设置,事件将不会触发。