367 lines
14 KiB
C#
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";
|
|
}
|
|
}
|
|
}
|