ab56a9bcf7
SVN-Revision: r240
856 lines
44 KiB
C#
856 lines
44 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Drawing;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Windows.Forms;
|
||
using Lskj.Model;
|
||
using Lskj.Core;
|
||
using DevExpress.XtraGrid.Views.Grid;
|
||
using DevExpress.XtraGrid;
|
||
using DevExpress.XtraTreeList.Columns;
|
||
using DevExpress.XtraEditors.Repository;
|
||
using DevExpress.XtraTreeList.Nodes;
|
||
using Lskj.Business.Impl;
|
||
using DevExpress.XtraTreeList;
|
||
using Lskj.Control.Model;
|
||
using DevExpress.XtraEditors;
|
||
using DevExpress.XtraBars;
|
||
using System.Collections.Specialized;
|
||
|
||
namespace Lskj.Control
|
||
{
|
||
public partial class FrmAutoSqlLoad : BaseForm
|
||
{
|
||
/// <summary>
|
||
/// 关联字段所在控件
|
||
/// </summary>
|
||
private System.Windows.Forms.Control ClickControl;
|
||
/// <summary>
|
||
/// 是否启用颜色改变提示
|
||
/// </summary>
|
||
private bool IsChangeItemColor;
|
||
/// <summary>
|
||
/// 右键菜单
|
||
/// </summary>
|
||
private DevExpress.XtraBars.PopupMenu popupMenu;
|
||
/// <summary>
|
||
/// 右侧panel内表格
|
||
/// </summary>
|
||
/// <value>The left grid view object.</value>
|
||
public Dictionary<int, GridControlEx> gridControlDic = new Dictionary<int, GridControlEx>();
|
||
public OrderedDictionary OrderGridControlDic = new OrderedDictionary();//排序字典
|
||
/// <summary>
|
||
/// 底部分组控件内
|
||
/// </summary>
|
||
/// <value>The left grid view object.</value>
|
||
public Dictionary<int, GroupBox> groupControlDic = new Dictionary<int, GroupBox>();
|
||
public OrderedDictionary OrderGroupControlDic = new OrderedDictionary();//排序字典
|
||
/// <summary>
|
||
/// 左侧树结构对象
|
||
/// </summary>
|
||
/// <value>The TreeView object.</value>
|
||
//public TreeViewEx LeftTreeViewObj { get { return this.leftTree; } }
|
||
/// <summary>
|
||
/// 中心表格对象
|
||
/// </summary>
|
||
/// <value>The left grid view object.</value>
|
||
public GridControlEx MainGridViewObj { get { return this.gcMain; } }
|
||
/// <summary>
|
||
/// 系统模块实体对象
|
||
/// </summary>
|
||
/// <value>The system model.</value>
|
||
public ModuleModel SysModel { get; private set; }
|
||
/// <summary>
|
||
/// 显示sql
|
||
/// </summary>
|
||
/// <value>The system model.</value>
|
||
public string EditText;
|
||
/// <summary>
|
||
/// sql列部分
|
||
/// </summary>
|
||
/// <value>The system model.</value>
|
||
public string sqlColText;
|
||
/// <summary>
|
||
/// sql关联部分
|
||
/// </summary>
|
||
/// <value>The system model.</value>
|
||
public string sqlJoinText;
|
||
public FrmAutoSqlLoad()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
#region 方法
|
||
#region 窗口加载
|
||
/// <summary>
|
||
/// <para>说明:窗口加载</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2021-09-22 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
protected override void OnLoad(EventArgs e)
|
||
{
|
||
this.CoumnGroup.AllowDrop = true;//允许拖拽
|
||
this.btn_Produce.Click += OnBtn_Produce_Click;
|
||
this.btn_determine.Click += OnBtn_determine_Click;
|
||
this.SizeChanged += OnFrmAutoSqlLoad_SizeChanged;
|
||
this.topSplitContainerControl.SplitterPositionChanged += OnTopSplitContainerControl_SplitterPositionChanged;
|
||
this.clearBtn.Click += OnClearBtn_Click;//清除按钮点击
|
||
popupMenu = new DevExpress.XtraBars.PopupMenu(barManager);//右键菜单
|
||
BarButtonItem barButtonItemFull = new DevExpress.XtraBars.BarButtonItem();
|
||
barButtonItemFull.Caption = "全连接";
|
||
barButtonItemFull.Name = "join";
|
||
BarButtonItem barButtonItemLeft = new DevExpress.XtraBars.BarButtonItem();
|
||
barButtonItemLeft.Caption = "左连接";
|
||
barButtonItemLeft.Name = "left join";
|
||
BarButtonItem barButtonItemRight = new DevExpress.XtraBars.BarButtonItem();
|
||
barButtonItemRight.Caption = "右连接";
|
||
barButtonItemRight.Name = "right join";
|
||
popupMenu.AddItems(new BarButtonItem[] { barButtonItemFull, barButtonItemLeft, barButtonItemRight });
|
||
for (int i = 0; i < popupMenu.ItemLinks.Count; i++)
|
||
{
|
||
popupMenu.ItemLinks[i].BeginGroup = true;//设置分割条
|
||
popupMenu.ItemLinks[i].Item.ItemClick += OnItem_ItemClick;
|
||
}
|
||
InitializationTreeList();
|
||
}
|
||
#endregion
|
||
#region 初始化左侧树
|
||
/// <summary>
|
||
/// <para>说明:初始化左侧树</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2021-09-22 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void InitializationTreeList()
|
||
{
|
||
creatTreeListControl();
|
||
this.leftTree.OptionsView.ShowCheckBoxes = true;
|
||
this.leftTree.OptionsBehavior.Editable = false;
|
||
string sqlValue = @"
|
||
WITH tmenu(id,MenuCaption,ParentId,menuid,SubSysId,level)
|
||
as
|
||
(
|
||
SELECT convert(varchar(50), menu.SubSysId)+'_'+ MenuStruct id,MenuCaption,CONVERT(varchar(50), -CONVERT(int, menu.SubSysId)) ParentId,menu.menuid,menu.SubSysId,1 level FROM p_formmenuconfigtab menu
|
||
inner join P_SubSystemTab sub on menu.SubSysId=sub.SubSysId and LEN(menustruct)=2
|
||
UNION ALL
|
||
SELECT convert(varchar(50), a.SubSysId)+'_'+A.MenuStruct id, A.MenuCaption,CONVERT(varchar(50),convert(varchar(50), a.SubSysId)+'_'+ SUBSTRING(a.MenuStruct,1,case when LEN(a.MenuStruct)>2 then LEN(a.MenuStruct)-2 else 0 end)) ParentId,a.MenuId,a.SubSysId ,b.level+1 FROM p_formmenuconfigtab A,tmenu b
|
||
where LEN(a.MenuStruct)>2 and convert(varchar(50), a.SubSysId)+'_'+ SUBSTRING(a.MenuStruct,1,case when LEN(a.MenuStruct)>2 then LEN(a.MenuStruct)-2 else 0 end) = b.id and a.SubSysId=b.SubSysId
|
||
)
|
||
select tm.MenuId, lm.id id,tm.urlparams menucode,tm.MenuCaption,tm.DllFileName library,lm.ParentId parentId,tm.SubSysId, lm.level,'' readflag, '' writeflag
|
||
from tmenu lm
|
||
left join p_formmenuconfigtab tm on lm.menuid=tm.menuid
|
||
union all
|
||
select '' menuid,convert(varchar(10), -SubSysId) MenuStruct ,'' menucode,subsysname MenuCaption,'' library,'' parentid,SubSysId,0 level,'' editflag, '' Readflag from P_SubSystemTab
|
||
ORDER BY SubSysId,id";
|
||
DataTable treeTable = SqlHelper.ExecuteDataTable(sqlValue);
|
||
DataTable dataTable = new DataTable();
|
||
dataTable.Columns.Add("id");
|
||
dataTable.Columns.Add("parentId");
|
||
dataTable.Columns.Add("Caption");
|
||
dataTable.Columns.Add("MenuId");
|
||
List<string> idlist = new List<string>();
|
||
for (int i = 0; i < treeTable.Rows.Count; i++)
|
||
{
|
||
DataRow newRow = dataTable.NewRow();
|
||
newRow["parentId"] = treeTable.Rows[i]["parentId"];
|
||
newRow["Caption"] = treeTable.Rows[i]["MenuCaption"];
|
||
newRow["MenuId"] = treeTable.Rows[i]["menucode"];
|
||
if (idlist.Contains(treeTable.Rows[i]["id"] + ""))
|
||
{
|
||
newRow["id"] = treeTable.Rows[i]["id"] + "" + '-' + i;
|
||
idlist.Add(newRow["id"] + "");
|
||
}
|
||
else
|
||
{
|
||
newRow["id"] = treeTable.Rows[i]["id"];
|
||
idlist.Add(newRow["id"] + "");
|
||
}
|
||
dataTable.Rows.Add(newRow);
|
||
}
|
||
this.leftTree.DataSource = dataTable;
|
||
this.leftTree.KeyFieldName = "id";
|
||
this.leftTree.ParentFieldName = "parentId";
|
||
this.leftTree.Columns[0].OptionsColumn.AllowEdit = false;
|
||
this.leftTree.Columns[1].OptionsColumn.AllowEdit = false;
|
||
this.leftTree.Columns[1].Visible = false;
|
||
this.leftTree.ExpandToLevel(0);
|
||
this.leftTree.OptionsBehavior.AllowIndeterminateCheckState = true;
|
||
this.leftTree.AfterCheckNode += OnLeftTree_AfterCheckNode;
|
||
this.leftTree.BeforeCheckNode += OnLeftTree_BeforeCheckNode;
|
||
}
|
||
|
||
#endregion
|
||
#region 动态创建TreeList的Column
|
||
/// <summary>
|
||
/// <para>说明:动态创建TreeList的Column</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2021-09-22 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void creatTreeListControl()
|
||
{
|
||
|
||
TreeListColumn treeListColumnName = new TreeListColumn();
|
||
treeListColumnName.Caption = "系统名称";
|
||
treeListColumnName.FieldName = "Caption";
|
||
treeListColumnName.MinWidth = 38;
|
||
treeListColumnName.Visible = true;
|
||
treeListColumnName.VisibleIndex = 0;
|
||
treeListColumnName.Width = 400;
|
||
|
||
TreeListColumn treeListColumnMenuId = new TreeListColumn();
|
||
treeListColumnMenuId.Caption = "菜单id";
|
||
treeListColumnMenuId.FieldName = "MenuId";
|
||
treeListColumnMenuId.Visible = true;
|
||
treeListColumnMenuId.VisibleIndex = 1;
|
||
|
||
this.leftTree.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] {
|
||
treeListColumnName,
|
||
treeListColumnMenuId,
|
||
});
|
||
this.leftTree.Nodes.Clear();
|
||
this.leftTree.Refresh();
|
||
}
|
||
#endregion
|
||
#region 子节点状态改变时
|
||
/// <summary>
|
||
/// <para>说明:子节点状态改变时</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2021-09-22 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void SetCheckedChildNodes(TreeListNode node, CheckState check)
|
||
{
|
||
for (int i = 0; i < node.Nodes.Count; i++)
|
||
{
|
||
node.Nodes[i].CheckState = check;
|
||
SetCheckedChildNodes(node.Nodes[i], check);
|
||
}
|
||
}
|
||
#endregion
|
||
#region 父节点状态改变时
|
||
/// <summary>
|
||
/// <para>说明:父节点状态改变时</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2021-09-22 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void SetCheckedParentNodes(TreeListNode node, CheckState check)
|
||
{
|
||
if (node.ParentNode != null)
|
||
{
|
||
bool b = false;
|
||
CheckState state;
|
||
for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
|
||
{
|
||
state = (CheckState)node.ParentNode.Nodes[i].CheckState;
|
||
if (!check.Equals(state))
|
||
{
|
||
b = !b;
|
||
break;
|
||
}
|
||
}
|
||
node.ParentNode.CheckState = b ? CheckState.Indeterminate : check;
|
||
SetCheckedParentNodes(node.ParentNode, check);
|
||
}
|
||
}
|
||
#endregion
|
||
#region 添加列至sql语句
|
||
private void AddColStrToSql()
|
||
{
|
||
this.ResGridInfText.Text = "";
|
||
//this.sqlRichTextBox.Text = "select ";
|
||
this.sqlColText = "select ";
|
||
this.sqlJoinText = string.Format("\r\nfrom {0}", ((((OrderGroupControlDic[0] as GroupBox).Tag as OrderedDictionary)[0] as SiftColControl.DragItem).ItemLable.Tag as GridView).Columns[0].FieldName);
|
||
for (int i = 0; i < OrderGroupControlDic.Count; i++)
|
||
{
|
||
GroupBox NGroupBox = OrderGroupControlDic[i] as GroupBox;
|
||
OrderedDictionary ItemsDic = NGroupBox.Tag as OrderedDictionary;
|
||
for (int j = 0; j < ItemsDic.Count; j++)
|
||
{
|
||
//DataRow[] rows = new DataRow[((ItemsDic[i] as SiftColControl.DragItem).Tag as OrderedDictionary).Count];
|
||
//((ItemsDic[i] as SiftColControl.DragItem).Tag as OrderedDictionary).Values.CopyTo(rows, 0);
|
||
//DataRow row = rows[0];
|
||
string colStrBefor = (ItemsDic[j] as SiftColControl.DragItem).ItemLable.Text;
|
||
string colStr = colStrBefor.Substring(colStrBefor.IndexOf('(') + 1, colStrBefor.IndexOf(')') - colStrBefor.IndexOf('(') - 1);
|
||
string colChineseStr = colStrBefor.Substring(0, colStrBefor.IndexOf('('));
|
||
this.sqlColText += string.Format("{0} {1},\r\n", colStr, colChineseStr);
|
||
}
|
||
}
|
||
this.sqlRichTextBox.Text = this.sqlColText.Substring(0, this.sqlColText.LastIndexOf(',')) + this.sqlJoinText;
|
||
}
|
||
#endregion
|
||
#endregion
|
||
#region 事件
|
||
#region 点击树表格节点前事件
|
||
// <summary>
|
||
/// <para>说明:点击树表格节点前事件</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2021-09-22 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnLeftTree_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
|
||
{
|
||
e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);
|
||
}
|
||
#endregion
|
||
#region 点击树表格节点后事件
|
||
// <summary>
|
||
/// <para>说明:点击树表格节点后事件</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2021-09-22 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnLeftTree_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
|
||
{
|
||
WaitForm.ShowForm();
|
||
SetCheckedChildNodes(e.Node, e.Node.CheckState);
|
||
SetCheckedParentNodes(e.Node, e.Node.CheckState);
|
||
|
||
TreeList treelist = (TreeList)sender;
|
||
foreach (TreeListNode checkNode in treelist.GetAllCheckedNodes())
|
||
{
|
||
if (checkNode.Nodes.Count == 0 && !gridControlDic.Keys.Contains(checkNode.Id))
|
||
{
|
||
GridControlEx gridControlEx = new GridControlEx();
|
||
gridControlEx.GridView.Tag = checkNode.Id;
|
||
DataTable rightListData = new DataTable();
|
||
DataTable rightListBoxTab = new DataTable();
|
||
|
||
if (SqlHelper.ExecuteDataTable(string.Format("select * from p_systemwordbooktab where tab='{0}'", checkNode.GetValue("MenuId"))).Rows.Count != 0)
|
||
rightListBoxTab = SqlHelper.ExecuteDataTable(string.Format("select * from p_systemwordbooktab where tab='{0}'", checkNode.GetValue("MenuId")));
|
||
else if (SqlHelper.ExecuteDataTable(string.Format("select * from p_systembillDetail where typecode='{0}'", checkNode.GetValue("MenuId"))).Rows.Count != 0)
|
||
rightListBoxTab = SqlHelper.ExecuteDataTable(string.Format("select * from p_systembillDetail where typecode='{0}'", checkNode.GetValue("MenuId")));
|
||
else if (SqlHelper.ExecuteDataTable(string.Format("select * from p_systembillstepgrid where typecode='{0}'", checkNode.GetValue("MenuId"))).Rows.Count != 0)
|
||
rightListBoxTab = SqlHelper.ExecuteDataTable(string.Format("select * from p_systembillstepgrid where typecode='{0}'", checkNode.GetValue("MenuId")));
|
||
else if (SqlHelper.ExecuteDataTable(string.Format("select * from p_systemdlltabflowstepgrid where typecode='{0}'", checkNode.GetValue("MenuId"))).Rows.Count != 0)
|
||
rightListBoxTab = SqlHelper.ExecuteDataTable(string.Format("select * from p_systemdlltabflowstepgrid where typecode='{0}'", checkNode.GetValue("MenuId")));
|
||
|
||
string tabName = SqlHelper.ExecuteObject("SQLDT1", string.Format("select SQLDT1 from p_systemdlltab where DllCoid='{0}'", checkNode.GetValue("MenuId"))) + "";
|
||
//DataTable NlistBoxTable = SqlHelper.ExecuteDataTable(string.Format("select * from {0}", tabName));
|
||
if (!string.IsNullOrEmpty(tabName))
|
||
{
|
||
gridControlDic.Add(checkNode.Id, gridControlEx);
|
||
OrderGridControlDic.Add(checkNode.Id + "", gridControlEx);
|
||
rightListData.Columns.Add(tabName);
|
||
for (int i = 0; i < rightListBoxTab.Rows.Count; i++)
|
||
{
|
||
DataRow newRow = rightListData.NewRow();
|
||
newRow[tabName] = string.IsNullOrEmpty(rightListBoxTab.Rows[i]["username1"] + "") ? string.Format("{0}({1})", rightListBoxTab.Rows[i]["fieldname"], rightListBoxTab.Rows[i]["fieldname"]) : string.Format("{0}({1})", rightListBoxTab.Rows[i]["username1"], rightListBoxTab.Rows[i]["fieldname"]);
|
||
rightListData.Rows.Add(newRow);
|
||
}
|
||
gridControlEx.gridControl.DataSource = rightListData;
|
||
gridControlEx.GridView.Columns[tabName].Caption = checkNode.GetValue("Caption") + "";
|
||
gridControlEx.GridView.Columns[tabName].Width = this.rightGridPanel.Width;
|
||
gridControlEx.GridView.Columns[tabName].AppearanceHeader.Font = new Font("微软雅黑", 12, FontStyle.Bold);
|
||
gridControlEx.GridView.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;//列标题居左
|
||
gridControlEx.GridView.Columns[tabName].OptionsColumn.AllowEdit = false;
|
||
gridControlEx.Tag = checkNode;
|
||
gridControlEx.GridView.BestFitColumns();
|
||
gridControlEx.Height = 200;
|
||
gridControlEx.Width = this.rightGridPanel.Width - 10;
|
||
this.rightGridPanel.Controls.Add(gridControlEx);
|
||
gridControlEx.GridView.IndicatorWidth = -1;
|
||
GridDragControl dragGrid = new GridDragControl(gridControlEx.GridView, this.CoumnGroup);
|
||
dragGrid.OnDragComplete += new GridFragControlCompleteEventHandler(OnDragControlCompleted);
|
||
}
|
||
}
|
||
}
|
||
List<GridControlEx> deleteControl = new List<GridControlEx>();
|
||
int rightGridCount = this.rightGridPanel.Controls.Count;
|
||
for (int i = 0; i < rightGridCount; i++)
|
||
{
|
||
GridControlEx newGridControlEx = this.rightGridPanel.Controls[i] as GridControlEx;
|
||
if (!treelist.GetAllCheckedNodes().Contains(newGridControlEx.Tag))
|
||
{
|
||
deleteControl.Add(newGridControlEx);
|
||
}
|
||
}
|
||
foreach (GridControlEx item in deleteControl)
|
||
{
|
||
TreeListNode listNode = item.Tag as TreeListNode;
|
||
gridControlDic.Remove(Convert.ToInt32(listNode.Id));
|
||
OrderGridControlDic.Remove(listNode.Id + "");
|
||
this.rightGridPanel.Controls.Remove(item);
|
||
}
|
||
int top = 5;
|
||
for (int i = 0; i < OrderGridControlDic.Count; i++)
|
||
{
|
||
GridControlEx newGridControlEx = OrderGridControlDic[i] as GridControlEx;
|
||
newGridControlEx.Width = newGridControlEx.Parent.Width - 10;
|
||
newGridControlEx.Location = new Point(0, top);
|
||
top += newGridControlEx.Height + 5;
|
||
}
|
||
WaitForm.HideForm();
|
||
}
|
||
#endregion
|
||
#region 拖拽完成事件
|
||
// <summary>
|
||
/// <para>说明:拖拽完成事件</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2021-09-22 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
protected void OnDragControlCompleted(object sender, GridDragControlArgs e)
|
||
{
|
||
if (!groupControlDic.Keys.Contains(Convert.ToInt32(e.SourceGridViewObj.Tag)))
|
||
{
|
||
GroupBox groupBox = new GroupBox();
|
||
groupControlDic.Add(Convert.ToInt32(e.SourceGridViewObj.Tag), groupBox);//Tag为对应树表格id
|
||
OrderGroupControlDic.Add(e.SourceGridViewObj.Tag + "", groupBox);
|
||
//Dictionary<int, SiftColControl.DragItem> dragItemsInGroupDic = new Dictionary<int, SiftColControl.DragItem>();//groupBox tag
|
||
OrderedDictionary dragItemsInGroupDic = new OrderedDictionary();
|
||
groupBox.Tag = dragItemsInGroupDic;//记录该控件下所有子控件数据
|
||
groupBox.Text = e.SourceGridViewObj.Columns[0].Caption;
|
||
groupBox.Font = new Font("微软雅黑", 12, FontStyle.Bold);
|
||
groupBox.BackColor = Color.White;
|
||
groupBox.Width = this.CoumnGroup.Width - 10;
|
||
groupBox.Parent = this.CoumnGroup;
|
||
SimpleButton closeBtn = new SimpleButton();
|
||
closeBtn.Anchor = AnchorStyles.Right | AnchorStyles.Top;
|
||
closeBtn.Text = "×";
|
||
closeBtn.Width = 20;
|
||
closeBtn.Height = 20;
|
||
closeBtn.Click += OnCloseBtn_Click;
|
||
closeBtn.Parent = groupBox;
|
||
closeBtn.Tag = groupBox;
|
||
closeBtn.Top = 5;
|
||
closeBtn.Left = closeBtn.Parent.Width - closeBtn.Width - 5;
|
||
int top = 5;
|
||
for (int i = 0; i < OrderGroupControlDic.Count; i++)
|
||
{
|
||
GroupBox newGroupBox = OrderGroupControlDic[i] as GroupBox;
|
||
newGroupBox.Width = newGroupBox.Parent.Width - 10;
|
||
newGroupBox.Location = new Point(0, top);
|
||
top += newGroupBox.Height + 5;
|
||
}
|
||
for (int i = 0; i < e.GridViewSelectRows.Count(); i++)
|
||
{
|
||
//Dictionary<int, DataRow> dragItemDic = new Dictionary<int, DataRow>();
|
||
OrderedDictionary dragItemDic = new OrderedDictionary();
|
||
SiftColControl.DragItem dragItem = new SiftColControl.DragItem();
|
||
dragItemDic.Add(e.GridViewSelectRows[i].Table.Rows.IndexOf(e.GridViewSelectRows[i]) + "", e.GridViewSelectRows[i]);//行索引,行数据
|
||
dragItemsInGroupDic.Add(e.GridViewSelectRows[i].Table.Rows.IndexOf(e.GridViewSelectRows[i]) + "", dragItem);
|
||
dragItem.ItemLable.Text = e.GridViewSelectRows[i][e.SourceGridViewObj.Columns[0].FieldName] + "";
|
||
dragItem.Tag = dragItemDic;
|
||
dragItem.ItemLable.Tag = e.SourceGridViewObj;
|
||
dragItem.Width = dragItem.ItemLable.Width + 10 + dragItem.ItemBtn.Height;
|
||
dragItem.ItemBtn.Width = dragItem.ItemBtn.Height;
|
||
dragItem.Parent = groupBox;
|
||
dragItem.ItemLable.MouseMove += OnDragItem_MouseMove;
|
||
dragItem.ItemLable.MouseLeave += OnDragItem_MouseLeave;
|
||
dragItem.ItemLable.MouseClick += OnMouseClick;
|
||
|
||
Lskj.Control.SiftColControl.DragItem.btn_ClickEventHanlder btn_ClickEventHanlder = null;
|
||
btn_ClickEventHanlder += new Lskj.Control.SiftColControl.DragItem.btn_ClickEventHanlder(deleteItem);//注册关闭事件
|
||
dragItem.setClickEvent(btn_ClickEventHanlder);
|
||
|
||
Lskj.Control.SiftColControl.DragItem.MouseUpEventHanlder mouseUpEventHanlder = null;
|
||
mouseUpEventHanlder += new Lskj.Control.SiftColControl.DragItem.MouseUpEventHanlder(showPopupMenu);//注册右击菜单事件
|
||
dragItem.setMouseUpEvent(mouseUpEventHanlder);
|
||
}
|
||
RedRawDragItem(groupBox);
|
||
}
|
||
else
|
||
{
|
||
GroupBox groupBox = groupControlDic[Convert.ToInt32(e.SourceGridViewObj.Tag)];
|
||
for (int i = 0; i < e.GridViewSelectRows.Count(); i++)
|
||
{
|
||
if (!(groupBox.Tag as OrderedDictionary).Contains(e.GridViewSelectRows[i].Table.Rows.IndexOf(e.GridViewSelectRows[i]) + ""))
|
||
{
|
||
//Dictionary<int, DataRow> dragItemDic = new Dictionary<int, DataRow>();
|
||
OrderedDictionary dragItemDic = new OrderedDictionary();
|
||
SiftColControl.DragItem dragItem = new SiftColControl.DragItem();
|
||
dragItemDic.Add(e.GridViewSelectRows[i].Table.Rows.IndexOf(e.GridViewSelectRows[i]) + "", e.GridViewSelectRows[i]);//行索引,行数据
|
||
(groupBox.Tag as OrderedDictionary).Add(e.GridViewSelectRows[i].Table.Rows.IndexOf(e.GridViewSelectRows[i]) + "", dragItem);
|
||
dragItem.ItemLable.Text = e.GridViewSelectRows[i][e.SourceGridViewObj.Columns[0].FieldName] + "";
|
||
dragItem.Tag = dragItemDic;
|
||
dragItem.ItemLable.Tag = e.SourceGridViewObj;
|
||
dragItem.Width = dragItem.ItemLable.Width + 10 + dragItem.ItemBtn.Height;
|
||
dragItem.ItemBtn.Width = dragItem.ItemBtn.Height;
|
||
dragItem.Parent = groupBox;
|
||
dragItem.ItemLable.MouseMove += OnDragItem_MouseMove;
|
||
dragItem.ItemLable.MouseLeave += OnDragItem_MouseLeave;
|
||
dragItem.ItemLable.MouseClick += OnMouseClick;
|
||
Lskj.Control.SiftColControl.DragItem.btn_ClickEventHanlder btn_ClickEventHanlder = null;
|
||
btn_ClickEventHanlder += new Lskj.Control.SiftColControl.DragItem.btn_ClickEventHanlder(deleteItem);//注册关闭事件
|
||
dragItem.setClickEvent(btn_ClickEventHanlder);
|
||
|
||
Lskj.Control.SiftColControl.DragItem.MouseUpEventHanlder mouseUpEventHanlder = null;
|
||
mouseUpEventHanlder += new Lskj.Control.SiftColControl.DragItem.MouseUpEventHanlder(showPopupMenu);//注册右击菜单事件
|
||
dragItem.setMouseUpEvent(mouseUpEventHanlder);
|
||
}
|
||
}
|
||
RedRawDragItem(groupBox);
|
||
}
|
||
AddColStrToSql();
|
||
}
|
||
#endregion
|
||
#region 删除单个Item控件
|
||
/// <summary>
|
||
/// <para>说明:删除单个Item控件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void deleteItem(Lskj.Control.SiftColControl.DragItem dragItem)
|
||
{
|
||
GroupBox panel = dragItem.Parent as GroupBox;
|
||
OrderedDictionary dragItemsInGroupDic = panel.Tag as OrderedDictionary;
|
||
panel.Controls.Remove(dragItem);
|
||
string[] keys = new string[(dragItem.Tag as OrderedDictionary).Count];
|
||
(dragItem.Tag as OrderedDictionary).Keys.CopyTo(keys, 0);
|
||
dragItemsInGroupDic.Remove(keys[0] + "");
|
||
if (dragItemsInGroupDic.Count == 0)
|
||
{
|
||
int index = groupControlDic.Where(n => n.Value == panel).Count() != 0 ? groupControlDic.Where(n => n.Value == panel).First().Key : -1;
|
||
if (index > 0)
|
||
{
|
||
this.CoumnGroup.Controls.Remove(panel);
|
||
groupControlDic.Remove(index);//移除没有控件的groupBox
|
||
OrderGroupControlDic.Remove(index + "");
|
||
|
||
int top = 5;
|
||
for (int i = 0; i < OrderGroupControlDic.Count; i++)
|
||
{
|
||
GroupBox newGroupBox = OrderGroupControlDic[i] as GroupBox;
|
||
newGroupBox.Width = newGroupBox.Parent.Width - 10;
|
||
newGroupBox.Location = new Point(0, top);
|
||
top += newGroupBox.Height + 5;
|
||
}
|
||
}
|
||
}
|
||
RedRawDragItem(panel);
|
||
int Ntop = 5;
|
||
for (int i = 0; i < OrderGroupControlDic.Count; i++)
|
||
{
|
||
GroupBox newGroupBox = OrderGroupControlDic[i] as GroupBox;
|
||
newGroupBox.Width = newGroupBox.Parent.Width - 10;
|
||
newGroupBox.Location = new Point(0, Ntop);
|
||
Ntop += newGroupBox.Height + 5;
|
||
}
|
||
AddColStrToSql();
|
||
}
|
||
#endregion
|
||
#region 重绘拖拽控件排布
|
||
/// <summary>
|
||
/// <para>说明:重绘拖拽控件排布</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void RedRawDragItem(System.Windows.Forms.Control panelControl)
|
||
{
|
||
int top = 30; int left = 5;
|
||
OrderedDictionary panelControlDic = panelControl.Tag as OrderedDictionary;
|
||
//Dictionary<int, SiftColControl.DragItem>.ValueCollection values = (panelControl.Tag as Dictionary<int, SiftColControl.DragItem>).Values;
|
||
for (int i = 0; i < panelControlDic.Count; i++)
|
||
{
|
||
if (left + (panelControlDic[i] as SiftColControl.DragItem).Width > panelControl.Width)
|
||
{
|
||
top += (panelControlDic[i] as SiftColControl.DragItem).Height + 5; left = 5;
|
||
(panelControlDic[i] as SiftColControl.DragItem).Location = new Point(left, top);
|
||
left += (panelControlDic[i] as SiftColControl.DragItem).Width + 5;
|
||
}
|
||
else
|
||
{
|
||
(panelControlDic[i] as SiftColControl.DragItem).Location = new Point(left, top);
|
||
left += (panelControlDic[i] as SiftColControl.DragItem).Width + 5;
|
||
}
|
||
}
|
||
if (panelControl.Controls.Count > 0)
|
||
{
|
||
panelControl.Height = top + panelControl.Controls[panelControl.Controls.Count - 1].Height + 10;
|
||
}
|
||
}
|
||
#endregion
|
||
#region 显示右键菜单
|
||
/// <summary>
|
||
/// <para>说明:显示右键菜单</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void showPopupMenu(Lskj.Control.SiftColControl.DragItem dragItem, MouseEventArgs e)
|
||
{
|
||
if (e.Button == MouseButtons.Right)
|
||
{
|
||
this.ClickControl = dragItem;
|
||
popupMenu.ShowPopup(System.Windows.Forms.Control.MousePosition);
|
||
}
|
||
}
|
||
#endregion
|
||
#region 右键菜单点击事件
|
||
/// <summary>
|
||
/// <para>说明:右键菜单点击事件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnItem_ItemClick(object sender, ItemClickEventArgs e)
|
||
{
|
||
this.IsChangeItemColor = true;
|
||
//GridView leftGridView = (this.ClickControl as SiftColControl.DragItem).ItemLable.Tag as GridView;
|
||
//this.sqlRichTextBox.Text = string.Format("{0}\r\nfrom {1} {2}", this.sqlRichTextBox.Text.Substring(0, this.sqlRichTextBox.Text.LastIndexOf(',')), leftGridView.Columns[0].FieldName, e.Item.Name + "");
|
||
if (this.sqlJoinText.Contains("join"))
|
||
this.sqlJoinText = this.sqlJoinText.Substring(0, this.sqlJoinText.LastIndexOf(' ')) + " " + e.Item.Name + "";
|
||
else
|
||
this.sqlJoinText += " " + e.Item.Name + "";
|
||
}
|
||
#endregion
|
||
#region 选择关联时鼠标滑动、离开和点击事件
|
||
/// <summary>
|
||
/// <para>说明:选择关联时鼠标滑动、离开和点击事件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnMouseClick(object sender, MouseEventArgs e)
|
||
{
|
||
System.Windows.Forms.Control control = (System.Windows.Forms.Control)sender;
|
||
if (IsChangeItemColor == true && control.Parent.Parent != this.ClickControl.Parent && e.Button == MouseButtons.Left)
|
||
{
|
||
SiftColControl.DragItem rightControl = control.Parent as SiftColControl.DragItem;
|
||
SiftColControl.DragItem leftControl = this.ClickControl as SiftColControl.DragItem;
|
||
string leftColStr = leftControl.ItemLable.Text.Substring(leftControl.ItemLable.Text.IndexOf('(') + 1, leftControl.ItemLable.Text.IndexOf(')') - leftControl.ItemLable.Text.IndexOf('(') - 1);
|
||
string rightColStr = rightControl.ItemLable.Text.Substring(rightControl.ItemLable.Text.IndexOf('(') + 1, rightControl.ItemLable.Text.IndexOf(')') - rightControl.ItemLable.Text.IndexOf('(') - 1);
|
||
//关联操作
|
||
//this.sqlRichTextBox.Text = string.Format("{0} {1} on {2} ={3}", this.sqlRichTextBox.Text, (rightControl.ItemLable.Tag as GridView).Columns[0].FieldName, leftColStr, rightColStr);
|
||
if (this.sqlJoinText.Contains((rightControl.ItemLable.Tag as GridView).Columns[0].FieldName))
|
||
{
|
||
this.sqlRichTextBox.Text = string.Format("{0} {1} on {2} ={3}", this.sqlColText.Substring(0, this.sqlColText.LastIndexOf(',')) + this.sqlJoinText, (leftControl.ItemLable.Tag as GridView).Columns[0].FieldName, leftColStr, rightColStr);
|
||
}
|
||
else
|
||
this.sqlRichTextBox.Text = string.Format("{0} {1} on {2} ={3}", this.sqlColText.Substring(0, this.sqlColText.LastIndexOf(',')) + this.sqlJoinText, (rightControl.ItemLable.Tag as GridView).Columns[0].FieldName, leftColStr, rightColStr);
|
||
control.BackColor = Color.Transparent;
|
||
this.IsChangeItemColor = false;
|
||
}
|
||
}
|
||
private void OnDragItem_MouseLeave(object sender, EventArgs e)
|
||
{
|
||
System.Windows.Forms.Control control = (System.Windows.Forms.Control)sender;
|
||
if (IsChangeItemColor == true && control.Parent.Parent != this.ClickControl.Parent)
|
||
{
|
||
control.BackColor = Color.Transparent;
|
||
}
|
||
}
|
||
private void OnDragItem_MouseMove(object sender, MouseEventArgs e)
|
||
{
|
||
System.Windows.Forms.Control control = (System.Windows.Forms.Control)sender;
|
||
if (IsChangeItemColor == true && control.Parent.Parent != this.ClickControl.Parent)
|
||
{
|
||
control.BackColor = Color.FromArgb(0, 108, 206);
|
||
}
|
||
}
|
||
#endregion
|
||
#region grouBox关闭按钮事件
|
||
/// <summary>
|
||
/// <para>说明:grouBox关闭按钮事件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnCloseBtn_Click(object sender, EventArgs e)
|
||
{
|
||
System.Windows.Forms.Control control = ((System.Windows.Forms.Control)sender).Tag as System.Windows.Forms.Control;
|
||
control.Parent.Controls.Remove(control);
|
||
int index = groupControlDic.Where(n => n.Value == control).Count() != 0 ? groupControlDic.Where(n => n.Value == control).First().Key : -1;
|
||
if (index > 0)
|
||
{
|
||
groupControlDic.Remove(index);//移除没有控件的groupBox
|
||
OrderGroupControlDic.Remove(index + "");
|
||
int top = 5;
|
||
for (int i = 0; i < OrderGroupControlDic.Count; i++)
|
||
{
|
||
GroupBox newGroupBox = OrderGroupControlDic[i] as GroupBox;
|
||
newGroupBox.Width = newGroupBox.Parent.Width - 10;
|
||
newGroupBox.Location = new Point(0, top);
|
||
top += newGroupBox.Height + 5;
|
||
}
|
||
}
|
||
AddColStrToSql();
|
||
}
|
||
#endregion
|
||
#region 清除按钮点击事件
|
||
/// <summary>
|
||
/// <para>说明:清除按钮点击事件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnClearBtn_Click(object sender, EventArgs e)
|
||
{
|
||
this.CoumnGroup.Controls.Clear();
|
||
groupControlDic.Clear();
|
||
OrderGroupControlDic.Clear();
|
||
this.gcMain.gridControl.DataSource = new DataTable();
|
||
this.gcMain.GridView.Columns.Clear();
|
||
this.ResGridInfText.Text = "";
|
||
this.sqlRichTextBox.Text = "";
|
||
}
|
||
#endregion
|
||
#region 窗体大小改变事件
|
||
/// <summary>
|
||
/// <para>说明:窗体大小改变事件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnFrmAutoSqlLoad_SizeChanged(object sender, EventArgs e)
|
||
{
|
||
int top = 5;
|
||
for (int i = 0; i < OrderGridControlDic.Count; i++)
|
||
{
|
||
GridControlEx newGridControlEx = OrderGridControlDic[i] as GridControlEx;
|
||
newGridControlEx.Width = newGridControlEx.Parent.Width - 10;
|
||
newGridControlEx.Location = new Point(0, top);
|
||
top += newGridControlEx.Height + 5;
|
||
}
|
||
}
|
||
#endregion
|
||
#region 分割条位置改变事件
|
||
/// <summary>
|
||
/// <para>说明:分割条位置改变事件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnTopSplitContainerControl_SplitterPositionChanged(object sender, EventArgs e)
|
||
{
|
||
int top = 5;
|
||
for (int i = 0; i < OrderGroupControlDic.Count; i++)
|
||
{
|
||
GroupBox newGroupBox = OrderGroupControlDic[i] as GroupBox;
|
||
newGroupBox.Width = newGroupBox.Parent.Width - 10;
|
||
newGroupBox.Location = new Point(0, top);
|
||
top += newGroupBox.Height + 5;
|
||
}
|
||
int Ntop = 5;
|
||
for (int i = 0; i < OrderGridControlDic.Count; i++)
|
||
{
|
||
GridControlEx newGridControlEx = OrderGridControlDic[i] as GridControlEx;
|
||
newGridControlEx.Width = newGridControlEx.Parent.Width - 10;
|
||
newGridControlEx.Location = new Point(0, Ntop);
|
||
Ntop += newGridControlEx.Height + 5;
|
||
}
|
||
}
|
||
#endregion
|
||
#region 生成按钮点击事件
|
||
/// <summary>
|
||
/// <para>说明:生成按钮点击事件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnBtn_Produce_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
DataTable produceTable = SqlHelper.ExecuteDataTable(this.sqlRichTextBox.Text);
|
||
if (produceTable != null)
|
||
{
|
||
this.gcMain.gridControl.DataSource = produceTable;
|
||
this.ResGridInfText.Text = "生成成功!";
|
||
this.ResGridInfText.Font = new Font("微软雅黑", 10);
|
||
}
|
||
else
|
||
{
|
||
this.ResGridInfText.Text = "生成失败!";
|
||
this.ResGridInfText.Font = new Font("微软雅黑", 10);
|
||
this.ResGridInfText.ForeColor = Color.Red;
|
||
}
|
||
}
|
||
catch (Exception)
|
||
{
|
||
this.ResGridInfText.Text = "生成失败,sql语句错误!";
|
||
this.ResGridInfText.Font = new Font("微软雅黑", 10);
|
||
this.ResGridInfText.ForeColor = Color.Red;
|
||
}
|
||
}
|
||
#endregion
|
||
#region 确定按钮点击事件
|
||
/// <summary>
|
||
/// <para>说明:确定按钮,窗口关闭事件</para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="sender">The sender.</param>
|
||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||
private void OnBtn_determine_Click(object sender, EventArgs e)
|
||
{
|
||
EditText = this.sqlRichTextBox.Text;
|
||
this.Close();
|
||
this.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||
}
|
||
#endregion
|
||
#endregion
|
||
}
|
||
}
|