using CloudBuilder; using CloudBuilder.Core.DependencyInjection.Form; using CloudBuilder.Core.DependencyInjection.Request; using CloudBuilder.Gui; using CloudBuilder.Gui.DependencyInjection; using CloudBuilder.Request.Security; using CloudBuilder.Security; using CloudBuilder.Security.Entity; using CloudBuilder.Security.Policy; using CloudBuilder.Util; using Microsoft.AspNetCore.Http.Extensions; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; using System.Runtime.Serialization; namespace Krypton.Toolkit { public partial class KryptonDataGridViewColumnSetDialog : KryptonForm { private SecurityMessagePolicy securityMessagePolicy; private string frozenColumnName; private TableLayoutPanel tableLayoutPanel1; private TableLayoutPanel tableLayoutPanel2; private KryptonButton allBut; private KryptonButton clearBut; private KryptonButton reverseBut; private KryptonButton upBut; private KryptonButton downBut; private KryptonButton unfreezeBut; private KryptonButton frozenBut; private KryptonLabel kryptonLabel1; private KryptonLabel kryptonLabel2; private TableLayoutPanel tableLayoutPanel3; private KryptonButton okBut; private KryptonButton cancelBut; private KryptonTextBox controlNameTxt; private KryptonTextBox frozenColumnTxt; private TreeView tv; private string parentName; private GuiBindingContext guiBindingContext; private KryptonButton resetBut; private GuiOperateHelper guiHelper = null; public KryptonDataGridViewColumnSetDialog(KryptonDataGridView _dgv) { InitializeComponent(); securityMessagePolicy = ServiceHelper.GetTypeService()!; this.Text = "调整列属性"; guiBindingContext = new GuiBindingContext(); guiHelper = new GuiOperateHelper(); dgv = _dgv; controlNameTxt.Text = parentName = _dgv.GetFormName(_dgv) + "." + _dgv.Name; this.AcceptButton = okBut; this.CancelButton = cancelBut; guiHelper.EnableControls(false, controlNameTxt, frozenColumnTxt); OnLoad(); } private KryptonDataGridView dgv; private Dictionary dic; private void OnLoad() { if (dgv == null) return; TreeNode node; DataGridViewColumn column; DataGridViewColumn tmpcol; dic = dgv.SaveGridView(); for (int i = 0; i < dgv.Columns.Count; i++) { for (int j = 0; j < dgv.Columns.Count; j++) { tmpcol = dgv.Columns[j]; if (tmpcol.DisplayIndex == i) { column = dgv.Columns[j]; if (column.Tag == null || (int)(column.Tag) != 0) //不显示的隐藏列初始化为tag=0 { node = new TreeNode(column.HeaderText); node.Tag = column; node.Checked = column.Visible; node.ImageIndex = i; node.ToolTipText = (i * 2).ToString(); tv.Nodes.Add(node); if (column.Frozen) { frozenColumnName = column.Name; frozenColumnTxt.Text = column.HeaderText; } } } } } } private void okBut_Click(object sender, EventArgs e) { RefreshDataGridView(); this.DialogResult = DialogResult.OK; this.Close(); } private void RefreshDataGridView() { dic = new Dictionary(); int i = 0; List df = new List(); DataGridViewColumnsInfo cf; foreach (TreeNode node in tv.Nodes) { dgv.Columns[i].Frozen = false; cf = new DataGridViewColumnsInfo(); cf.DisplayIndex = tv.Nodes[i].ImageIndex.ToString(); cf.Width = ((DataGridViewColumn)node.Tag).Width.ToString(); cf.Visiable = tv.Nodes[i].Checked ? "true" : "false"; cf.Name = ((DataGridViewColumn)node.Tag).Name; df.Add(cf); dic.Add(cf.Name, new string[] { cf.DisplayIndex, cf.Width, cf.Visiable }); i++; } dgv.LoadGridView(dic); if (!string.IsNullOrEmpty(frozenColumnName)) dgv.Columns[frozenColumnName].Frozen = true; ExDataGridViewInfo info = new ExDataGridViewInfo(); info.FrozenName = frozenColumnName; info.ColumnsInfo = df.ToArray(); string serializable = SerializeHelper.Serialize(info); SecurityUserPreferenceEntity upf = new SecurityUserPreferenceEntity(); upf.PreferenceKey = parentName; upf.Preference = serializable; upf.CreatedDatetime = upf.UpdatedDatetime = DateTime.Now; upf.CreatedBy = upf.UpdatedBy = upf.Username = ApplicationServiceContext.Context.Requestor; try { SecurityUserPreferenceRequest request = ServiceHelper.GetTypeService(); request.Update(upf); ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_UPDATED_NULL)); } catch (ValidationException validation) { ShowMessageBox.ShowInfo(validation); } catch (Exception ex) { ShowMessageBox.ShowError(ex); } } private void upBut_Click(object sender, EventArgs e) { TreeNode selected = tv.SelectedNode; tv.SelectedNode.ToolTipText = (Convert.ToInt32(tv.SelectedNode.ToolTipText) - 3).ToString(); ResetTreeNode(selected); } private void downBut_Click(object sender, EventArgs e) { TreeNode selected = tv.SelectedNode; tv.SelectedNode.ToolTipText = (Convert.ToInt32(tv.SelectedNode.ToolTipText) + 3).ToString(); ResetTreeNode(selected); } private void ResetTreeNode(TreeNode selected) { List ls = new List(); TreeNode temp = selected; foreach (TreeNode node in tv.Nodes) { ls.Add(node); } tv.Nodes.Clear(); ls = ls.OrderBy(x => Convert.ToInt32(x.ToolTipText)).ToList(); int i = 0; foreach (TreeNode node in ls) { node.ToolTipText = (i * 2).ToString(); node.ImageIndex = i; tv.Nodes.Add(node); i++; if (node.Text != selected.Text) continue; temp = node; } tv.SelectedNode = temp; tv.Select(); } private void btnCancel_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } private void frozenBut_Click(object sender, EventArgs e) { if (!tv.SelectedNode.Checked) return; frozenColumnName = ((DataGridViewColumn)tv.SelectedNode.Tag).Name; frozenColumnTxt.Text = ((DataGridViewColumn)tv.SelectedNode.Tag).HeaderText; tv.Select(); } private void unfreezeBut_Click(object sender, EventArgs e) { frozenColumnTxt.Text = null; frozenColumnName = null; tv.Select(); } private void tv_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { tv.SelectedNode.Checked = !tv.SelectedNode.Checked; } private void InitializeComponent() { tableLayoutPanel1 = new TableLayoutPanel(); tableLayoutPanel2 = new TableLayoutPanel(); allBut = new KryptonButton(); clearBut = new KryptonButton(); reverseBut = new KryptonButton(); upBut = new KryptonButton(); downBut = new KryptonButton(); unfreezeBut = new KryptonButton(); frozenBut = new KryptonButton(); kryptonLabel1 = new KryptonLabel(); kryptonLabel2 = new KryptonLabel(); tableLayoutPanel3 = new TableLayoutPanel(); okBut = new KryptonButton(); cancelBut = new KryptonButton(); resetBut = new KryptonButton(); controlNameTxt = new KryptonTextBox(); frozenColumnTxt = new KryptonTextBox(); tv = new TreeView(); tableLayoutPanel1.SuspendLayout(); tableLayoutPanel2.SuspendLayout(); tableLayoutPanel3.SuspendLayout(); SuspendLayout(); // // tableLayoutPanel1 // tableLayoutPanel1.ColumnCount = 3; tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle()); tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle()); tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 2, 2); tableLayoutPanel1.Controls.Add(kryptonLabel1, 0, 1); tableLayoutPanel1.Controls.Add(kryptonLabel2, 0, 0); tableLayoutPanel1.Controls.Add(tableLayoutPanel3, 1, 3); tableLayoutPanel1.Controls.Add(controlNameTxt, 1, 0); tableLayoutPanel1.Controls.Add(frozenColumnTxt, 1, 1); tableLayoutPanel1.Controls.Add(tv, 1, 2); tableLayoutPanel1.Dock = DockStyle.Fill; tableLayoutPanel1.Location = new Point(0, 0); tableLayoutPanel1.Name = "tableLayoutPanel1"; tableLayoutPanel1.RowCount = 4; tableLayoutPanel1.RowStyles.Add(new RowStyle()); tableLayoutPanel1.RowStyles.Add(new RowStyle()); tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); tableLayoutPanel1.RowStyles.Add(new RowStyle()); tableLayoutPanel1.Size = new Size(467, 596); tableLayoutPanel1.TabIndex = 0; // // tableLayoutPanel2 // tableLayoutPanel2.AutoSize = true; tableLayoutPanel2.AutoSizeMode = AutoSizeMode.GrowAndShrink; tableLayoutPanel2.ColumnCount = 1; tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle()); tableLayoutPanel2.Controls.Add(allBut, 0, 2); tableLayoutPanel2.Controls.Add(clearBut, 0, 3); tableLayoutPanel2.Controls.Add(reverseBut, 0, 4); tableLayoutPanel2.Controls.Add(upBut, 0, 5); tableLayoutPanel2.Controls.Add(downBut, 0, 6); tableLayoutPanel2.Controls.Add(unfreezeBut, 0, 0); tableLayoutPanel2.Controls.Add(frozenBut, 0, 1); tableLayoutPanel2.Location = new Point(371, 58); tableLayoutPanel2.Margin = new Padding(0); tableLayoutPanel2.Name = "tableLayoutPanel2"; tableLayoutPanel2.RowCount = 7; tableLayoutPanel2.RowStyles.Add(new RowStyle()); tableLayoutPanel2.RowStyles.Add(new RowStyle()); tableLayoutPanel2.RowStyles.Add(new RowStyle()); tableLayoutPanel2.RowStyles.Add(new RowStyle()); tableLayoutPanel2.RowStyles.Add(new RowStyle()); tableLayoutPanel2.RowStyles.Add(new RowStyle()); tableLayoutPanel2.RowStyles.Add(new RowStyle()); tableLayoutPanel2.Size = new Size(96, 217); tableLayoutPanel2.TabIndex = 0; // // allBut // allBut.Location = new Point(3, 65); allBut.Name = "allBut"; allBut.Size = new Size(90, 25); allBut.TabIndex = 1; allBut.Values.Text = "全选"; allBut.Click += allBut_Click; // // clearBut // clearBut.Location = new Point(3, 96); clearBut.Name = "clearBut"; clearBut.Size = new Size(90, 25); clearBut.TabIndex = 1; clearBut.Values.Text = "清空"; clearBut.Click += clearBut_Click; // // reverseBut // reverseBut.Location = new Point(3, 127); reverseBut.Name = "reverseBut"; reverseBut.Size = new Size(90, 25); reverseBut.TabIndex = 1; reverseBut.Values.Text = "反选"; reverseBut.Click += reverseBut_Click; // // upBut // upBut.Location = new Point(3, 158); upBut.Name = "upBut"; upBut.Size = new Size(90, 25); upBut.TabIndex = 1; upBut.Values.Text = "向上"; upBut.Click += upBut_Click; // // downBut // downBut.Location = new Point(3, 189); downBut.Name = "downBut"; downBut.Size = new Size(90, 25); downBut.TabIndex = 1; downBut.Values.Text = "向下"; downBut.Click += downBut_Click; // // unfreezeBut // unfreezeBut.Location = new Point(3, 3); unfreezeBut.Name = "unfreezeBut"; unfreezeBut.Size = new Size(90, 25); unfreezeBut.TabIndex = 1; unfreezeBut.Values.Text = "解冻"; unfreezeBut.Click += unfreezeBut_Click; // // frozenBut // frozenBut.Location = new Point(3, 34); frozenBut.Name = "frozenBut"; frozenBut.Size = new Size(90, 25); frozenBut.TabIndex = 1; frozenBut.Values.Text = "冻结"; frozenBut.Click += frozenBut_Click; // // kryptonLabel1 // kryptonLabel1.Location = new Point(3, 32); kryptonLabel1.Name = "kryptonLabel1"; kryptonLabel1.Size = new Size(65, 20); kryptonLabel1.TabIndex = 1; kryptonLabel1.Values.Text = "冻结列名:"; // // kryptonLabel2 // kryptonLabel2.Location = new Point(3, 3); kryptonLabel2.Name = "kryptonLabel2"; kryptonLabel2.Size = new Size(65, 20); kryptonLabel2.TabIndex = 2; kryptonLabel2.Values.Text = "组件名称:"; kryptonLabel2.Visible = false; // // tableLayoutPanel3 // tableLayoutPanel3.AutoSize = true; tableLayoutPanel3.AutoSizeMode = AutoSizeMode.GrowAndShrink; tableLayoutPanel3.ColumnCount = 4; tableLayoutPanel1.SetColumnSpan(tableLayoutPanel3, 2); tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle()); tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle()); tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle()); tableLayoutPanel3.Controls.Add(okBut, 2, 0); tableLayoutPanel3.Controls.Add(cancelBut, 3, 0); tableLayoutPanel3.Controls.Add(resetBut, 1, 0); tableLayoutPanel3.Dock = DockStyle.Fill; tableLayoutPanel3.Location = new Point(71, 565); tableLayoutPanel3.Margin = new Padding(0); tableLayoutPanel3.Name = "tableLayoutPanel3"; tableLayoutPanel3.RowCount = 1; tableLayoutPanel3.RowStyles.Add(new RowStyle()); tableLayoutPanel3.Size = new Size(396, 31); tableLayoutPanel3.TabIndex = 3; // // okBut // okBut.Location = new Point(207, 3); okBut.Name = "okBut"; okBut.Size = new Size(90, 25); okBut.TabIndex = 0; okBut.Values.Text = "确定"; okBut.Click += okBut_Click; // // cancelBut // cancelBut.Location = new Point(303, 3); cancelBut.Name = "cancelBut"; cancelBut.Size = new Size(90, 25); cancelBut.TabIndex = 1; cancelBut.Values.Text = "取消"; // // resetBut // resetBut.Location = new Point(111, 3); resetBut.Name = "resetBut"; resetBut.Size = new Size(90, 25); resetBut.TabIndex = 0; resetBut.Values.Text = "重置"; resetBut.Click += resetBut_Click; // // controlNameTxt // controlNameTxt.Dock = DockStyle.Fill; controlNameTxt.Location = new Point(74, 3); controlNameTxt.Name = "controlNameTxt"; controlNameTxt.Size = new Size(294, 23); controlNameTxt.TabIndex = 4; controlNameTxt.Visible = false; // // frozenColumnTxt // frozenColumnTxt.Dock = DockStyle.Fill; frozenColumnTxt.Location = new Point(74, 32); frozenColumnTxt.Name = "frozenColumnTxt"; frozenColumnTxt.Size = new Size(294, 23); frozenColumnTxt.TabIndex = 4; // // tv // tv.CheckBoxes = true; tv.Dock = DockStyle.Fill; tv.Location = new Point(74, 58); tv.Margin = new Padding(3, 0, 3, 3); tv.Name = "tv"; tv.Size = new Size(294, 504); tv.TabIndex = 7; tv.NodeMouseDoubleClick += tv_NodeMouseDoubleClick; // // KryptonDataGridViewColumnSetDialog // ClientSize = new Size(467, 596); Controls.Add(tableLayoutPanel1); Name = "KryptonDataGridViewColumnSetDialog"; tableLayoutPanel1.ResumeLayout(false); tableLayoutPanel1.PerformLayout(); tableLayoutPanel2.ResumeLayout(false); tableLayoutPanel3.ResumeLayout(false); ResumeLayout(false); } private void allBut_Click(object sender, EventArgs e) { foreach (TreeNode node in tv.Nodes) { node.Checked = true; } } private void clearBut_Click(object sender, EventArgs e) { foreach (TreeNode node in tv.Nodes) { node.Checked = false; } } private void reverseBut_Click(object sender, EventArgs e) { foreach (TreeNode node in tv.Nodes) { node.Checked = !node.Checked; } } private void resetBut_Click(object sender, EventArgs e) { SecurityUserPreferenceEntityKey upf = new SecurityUserPreferenceEntityKey(); upf.PreferenceKey = parentName; upf.Username = ApplicationServiceContext.Context.Requestor; try { SecurityUserPreferenceRequest request = ServiceHelper.GetTypeService(); request.Delete(upf); ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_UPDATED_NULL)); this.DialogResult = DialogResult.OK; this.Close(); } catch (ValidationException validation) { ShowMessageBox.ShowInfo(validation); } catch (Exception ex) { ShowMessageBox.ShowError(ex); } } } }