CloudBuilder/CloudBuilder.Gui/KryptonDataGridViewColumnSetDialog.cs
owenchen 1c0c83af5f ow
2026-05-12 10:09:31 +08:00

554 lines
20 KiB
C#
Raw 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 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<SecurityMessagePolicy>()!;
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<string, string[]> 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) //不显示的隐藏列初始化为tag0
{
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<string, string[]>();
int i = 0;
List<DataGridViewColumnsInfo> df = new List<DataGridViewColumnsInfo>();
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<SecurityUserPreferenceRequest>();
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<TreeNode> ls = new List<TreeNode>();
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<SecurityUserPreferenceRequest>();
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);
}
}
}
}