Files
lserp_cs_5.0/插件库/Lskj.Common/GridDrag.cs
T
2026-07-10 15:25:05 +08:00

367 lines
14 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using CommonLib;
namespace Lskj.Common
{
public class GridDragTree
{
private string SQLDT1;
private string filedKey;
private DataRow sdkModel;
public GridDragTree(Form thisForm, GridControl grid, TreeView target, DragEventHandler Complete, DataRow sdkModel, string SQLDT1, string filedKey)
{
opForm = thisForm;
currentGridView = (GridView)grid.FocusedView;
dragComplete = Complete;
grid.FocusedView.MouseDown += new MouseEventHandler(gridMouseDown);
grid.FocusedView.MouseMove += new MouseEventHandler(gridMouseMove);
target.HideSelection = false;
target.DragOver += new DragEventHandler(objDragOver);
target.DragDrop += new DragEventHandler(objDragDrop);
target.AllowDrop = true;
this.sdkModel = sdkModel;
this.SQLDT1 = SQLDT1;
this.filedKey = filedKey;
}
private GridHitInfo downHitInfo = null;
private GridView currentGridView = null;
Form opForm = null;
DragEventHandler dragComplete = null;
private void gridMouseDown(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.RowHandle >= 0)
downHitInfo = hitInfo;
}
private void gridMouseMove(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)))
{
object row = view.GetRow(downHitInfo.RowHandle);
view.GridControl.DoDragDrop(row, DragDropEffects.Move);
downHitInfo = null;
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
}
}
}
private void objDragOver(object sender, DragEventArgs e)
{
(sender as TreeView).Select();
e.Effect = DragDropEffects.Move;
TreeNode tn = null;
Point pt = new Point();
pt.X = e.X;
pt.Y = e.Y;
tn = (sender as TreeView).GetNodeAt((sender as TreeView).PointToClient(pt));
if (tn == null)
return;
(sender as TreeView).SelectedNode = tn;
if (tn.GetNodeCount(true) > 0)
tn.Expand();
}
private void objDragDrop(object sender, DragEventArgs e)
{
//这里处理拖放后的操作,比如更改选中数据属性
TreeNode tn = null;
Point pt = new Point();
pt.X = e.X;
pt.Y = e.Y;
tn = (sender as TreeView).GetNodeAt((sender as TreeView).PointToClient(pt));
if (tn == null)
return;
if (tn.GetNodeCount(true) > 0)
{
MessageBox.Show("【" + tn.Text + "】不是最后一级不能拖拽");
return;
}
if (MessageBox.Show("确定将所选档案信息转移到[" + tn.Text + "]", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
//选中行操作,修改或者删除
int[] rowid = currentGridView.GetSelectedRows();
foreach (int rid in rowid)
{
DataRow dr = currentGridView.GetDataRow(rid);
SqlHelper.ExecuteNonQuery("update " + SQLDT1 + " set " + sdkModel["fieldname"] + "='" + tn.Name + "' where " + filedKey + "='" + dr[filedKey] + "'");
}
dragComplete(sender, e);
}
}
public class GridDrag2Grid
{
private GridHitInfo downHitInfo;
GridView sourceView = null;
GridView targetView = null;
public callBack internal_func { get; set; }
private bool dragIng = false;
public delegate void callBack(object sender);
public GridDrag2Grid(GridControl source, GridControl target, callBack callFunc)
{
internal_func = callFunc;
sourceView = (source.FocusedView as GridView);
targetView = (target.FocusedView as GridView);
(source.FocusedView as GridView).OptionsSelection.MultiSelect = true;
source.FocusedView.MouseDown += new MouseEventHandler(gridViewMouseDown);
source.FocusedView.MouseMove += new MouseEventHandler(gridViewMouseMove);
source.FocusedView.MouseUp += new MouseEventHandler(gridViewMouseUp);
target.AllowDrop = true;
target.DragEnter += new DragEventHandler(gridDragEnter);
target.DragDrop += new DragEventHandler(gridDragDrop);
}
private void gridMouseDown(object sender, MouseEventArgs e)
{
downHitInfo = sourceView.CalcHitInfo(new Point(e.X, e.Y));
dragIng = true;
}
private void gridMouseMove(object sender, MouseEventArgs e)
{
if (downHitInfo == null) return;
if (e.Button != MouseButtons.Left) return;
Rectangle dragRect = new Rectangle(new Point(
downHitInfo.HitPoint.X - SystemInformation.DragSize.Width / 2,
downHitInfo.HitPoint.Y - SystemInformation.DragSize.Height / 2), SystemInformation.DragSize);
if (!dragRect.Contains(new Point(e.X, e.Y)))
{
DataRow data = sourceView.GetDataRow(downHitInfo.RowHandle);
int[] rows = sourceView.GetSelectedRows();
List<DataRow> row = new List<DataRow>();
for (int i = 0; i < rows.Length; i++)
row.Add(sourceView.GetDataRow((int)rows[i]));
(sender as GridControl).DoDragDrop(row, DragDropEffects.Move);
}
}
private void gridViewMouseDown(object sender, MouseEventArgs e)
{
targetView.Tag = "1";
dragIng = true;
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.RowHandle >= 0)
downHitInfo = hitInfo;
}
private void gridViewMouseUp(object sender, MouseEventArgs e)
{
dragIng = false;
targetView.Tag = "0";
}
private void gridViewMouseMove(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)))
{
object row = view.GetRow(downHitInfo.RowHandle);
view.GridControl.DoDragDrop(row, DragDropEffects.Move);
downHitInfo = null;
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
}
}
}
private void gridDragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
targetView.Tag = "1";
}
private void gridDragDrop(object sender, DragEventArgs e)
{
if (internal_func != null)
{
if (dragIng == true)
{
internal_func(sender);
dragIng = false;
}
return;
}
GridControl grid = sender as GridControl;
DataTable table = grid.DataSource as DataTable;
List<DataRow> row = e.Data.GetData(typeof(List<DataRow>)) as List<DataRow>;
if (row != null && table != null)
{
if (row.Count > 0)
{
for (int i = 0; i < row.Count; i++)
{
table.ImportRow(row[i]);
row[i].Delete(); // 把原有的数据行删除。
}
}
}
dragIng = false;
targetView.Tag = "0";
}
}
public class GridDrag2GridUpdate
{
private GridHitInfo downHitInfo;
GridView sourceView = null;
GridView targetView = null;
public callBack internal_func { get; set; }
private bool dragIng = false;
public delegate void callBack(object sender);
public GridDrag2GridUpdate(GridControl source, GridControl target, callBack callFunc)
{
internal_func = callFunc;
sourceView = (source.FocusedView as GridView);
targetView = (target.FocusedView as GridView);
source.FocusedView.MouseDown += new MouseEventHandler(gridViewMouseDown);
source.FocusedView.MouseMove += new MouseEventHandler(gridViewMouseMove);
source.FocusedView.MouseUp += new MouseEventHandler(gridViewMouseUp);
target.AllowDrop = true;
target.DragOver += new DragEventHandler(target_DragOver);
target.DragEnter += new DragEventHandler(gridDragEnter);
target.DragDrop += new DragEventHandler(gridDragDrop);
}
private void gridMouseDown(object sender, MouseEventArgs e)
{
downHitInfo = sourceView.CalcHitInfo(new Point(e.X, e.Y));
dragIng = true;
targetView.Tag = "1";
}
private void gridMouseMove(object sender, MouseEventArgs e)
{
if (downHitInfo == null) return;
if (e.Button != MouseButtons.Left) return;
Rectangle dragRect = new Rectangle(new Point(
downHitInfo.HitPoint.X - SystemInformation.DragSize.Width / 2,
downHitInfo.HitPoint.Y - SystemInformation.DragSize.Height / 2), SystemInformation.DragSize);
if (!dragRect.Contains(new Point(e.X, e.Y)))
{
DataRow data = sourceView.GetDataRow(downHitInfo.RowHandle);
int[] rows = sourceView.GetSelectedRows();
List<DataRow> row = new List<DataRow>();
for (int i = 0; i < rows.Length; i++)
row.Add(sourceView.GetDataRow((int)rows[i]));
(sender as GridControl).DoDragDrop(row, DragDropEffects.Move);
}
}
private void gridViewMouseDown(object sender, MouseEventArgs e)
{
targetView.Tag = "1";
dragIng = true;
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.RowHandle >= 0)
downHitInfo = hitInfo;
}
private void gridViewMouseMove(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)))
{
object row = view.GetRow(downHitInfo.RowHandle);
view.GridControl.DoDragDrop(row, DragDropEffects.Move);
downHitInfo = null;
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
}
}
}
private void gridViewMouseUp(object sender, MouseEventArgs e)
{
dragIng = false;
targetView.Tag = "0";
}
private void target_DragOver(object sender, DragEventArgs e)
{
GridControl targetControl = (sender as GridControl);
GridView targetGrid = targetControl.FocusedView as GridView;
Point gcPoint = targetControl.PointToScreen((sender as GridControl).Location);
Point pt = new Point(e.X - gcPoint.X, e.Y - gcPoint.Y);
downHitInfo = targetGrid.CalcHitInfo(pt);
if (downHitInfo == null || downHitInfo.RowHandle < 0) return;
targetGrid.SelectRow(downHitInfo.RowHandle);
targetGrid.FocusedRowHandle = downHitInfo.RowHandle;
}
private void gridDragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
targetView.Tag = "1";
}
private void gridDragDrop(object sender, DragEventArgs e)
{
if (internal_func != null)
{
if (dragIng == true)
{
internal_func(sender);
dragIng = false;
}
targetView.Tag = "0";
return;
}
GridControl grid = sender as GridControl;
DataTable table = grid.DataSource as DataTable;
List<DataRow> row = e.Data.GetData(typeof(List<DataRow>)) as List<DataRow>;
if (row != null && table != null)
{
if (row.Count > 0)
{
for (int i = 0; i < row.Count; i++)
{
table.ImportRow(row[i]);
row[i].Delete(); // 把原有的数据行删除。
}
}
}
targetView.Tag = "0";
}
}
}