Files
lserp_cs_6.0/插件库/Lskj.Control/FrmAutoSqlLoad.cs
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

856 lines
44 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}
}