Commit 002ee8ba authored by tr's avatar tr

1、模块管理:基础增删功能

parent caf3243d
......@@ -213,10 +213,8 @@ namespace Tools.MyUtils
{
if (c.AllowDBNull || c.AutoIncrement)
continue;
//非空列处理:主键列根据列类型生成;非主键列统一用0初始化
// 非空主键可以自动赋值,其他列用0 未考虑数据类型会直接报错
result[c.ColumnName] = dt.PrimaryKey.Contains(c) ? GetDefaultPrimaryKey(c) : GetDefaultColumnValue(c);
//非空列初始化,主要是主键
result[c.ColumnName] = GetDefaultColumnValue(c);
result.EndEdit();
}
//当有筛选条件时,默认赋值筛选字段
......@@ -240,13 +238,13 @@ namespace Tools.MyUtils
return result;
}
/// <summary>
/// 【私有】获取默认主键值(防止创建新行时,主键为空报错)
/// 【私有】获取列默认值(防止创建新行时,非空列报错)
/// </summary>
/// <param name="c"></param>
/// <returns></returns>
private static string GetDefaultPrimaryKey(DataColumn c)
private static string GetDefaultColumnValue(DataColumn c)
{
var result = "";
var result = "0";
var typeName = c.DataType.Name.ToLower();
if (typeName.Equals("int32") || typeName.Equals("int64"))
......@@ -259,6 +257,10 @@ namespace Tools.MyUtils
{
result = Guid.NewGuid().ToString();
}
else if (typeName.Equals("datetime"))
{
result = Utils.Now();
}
else
{
result = $"{c.ColumnName}_{c.Table.Rows.Count}";
......@@ -267,42 +269,31 @@ namespace Tools.MyUtils
return result;
}
private static object GetDefaultColumnValue(DataColumn c)
/// <summary>
/// 复制两行(针对相同结构,不同结构只复制相同列)
/// </summary>
/// <param name="drFrom">源行</param>
/// <param name="drTarget">目标行</param>
/// <param name="ExceptList">除外的列(即其中包含的列不复制到目标行)</param>
public static void CopyRow(DataRow drFrom, DataRow drTarget, List<string> ExceptList = null)
{
object result = "0";
var typeName = c.DataType.Name.ToLower();
if (typeName.Equals("int32") || typeName.Equals("int64"))
{
var obj = c.Table.Compute($"Max({c.ColumnName})", "1=1");
int.TryParse(obj?.ToString(), out int max);
result = (max + 1).ToString();
}
else if (typeName.Equals("guid"))
{
result = Guid.NewGuid().ToString();
}
else if (typeName.Equals("datetime"))
{
result = DateTime.Now;
}
else
if (drFrom == null || drTarget == null)
return;
//
foreach (DataColumn c in drFrom.Table.Columns)
{
result = $"{c.ColumnName}_{c.Table.Rows.Count}";
string ColName = c.ColumnName;
//ID和指定列不复制
if (ColName.ToLower().Equals("id") || ExceptList?.IndexOf(ColName) >= 0)
continue;
if (drTarget.Table.Columns.Contains(ColName))
{
drTarget[ColName] = drFrom[ColName];
}
drTarget.EndEdit();
}
return result;
}
#endregion
#region (扩展)整型范围
......@@ -468,29 +459,29 @@ namespace Tools.MyUtils
//转为汉字域码:高字节左移8位,加上低位字节
int n = (gbytes[0] << 8) + gbytes[1];
//根据汉字域码获取拼音首字母
if (n.Between(0xB0A1, 0xB0C4)) return 'a';
if (n.Between(0XB0C5, 0XB2C0)) return 'b';
if (n.Between(0xB2C1, 0xB4ED)) return 'c';
if (n.Between(0xB4EE, 0xB6E9)) return 'd';
if (n.Between(0xB6EA, 0xB7A1)) return 'e';
if (n.Between(0xB7A2, 0xB8c0)) return 'f';
if (n.Between(0xB8C1, 0xB9FD)) return 'g';
if (n.Between(0xB9FE, 0xBBF6)) return 'h';
if (n.Between(0xBBF7, 0xBFA5)) return 'j';
if (n.Between(0xBFA6, 0xC0AB)) return 'k';
if (n.Between(0xC0AC, 0xC2E7)) return 'l';
if (n.Between(0xC2E8, 0xC4C2)) return 'm';
if (n.Between(0xC4C3, 0xC5B5)) return 'n';
if (n.Between(0xC5B6, 0xC5BD)) return 'o';
if (n.Between(0xC5BE, 0xC6D9)) return 'p';
if (n.Between(0xC6DA, 0xC8BA)) return 'q';
if (n.Between(0xC8BB, 0xC8F5)) return 'r';
if (n.Between(0xC8F6, 0xCBF9)) return 's';
if (n.Between(0xCBFA, 0xCDD9)) return 't';
if (n.Between(0xCDDA, 0xCEF3)) return 'w';
if (n.Between(0xCEF4, 0xD188)) return 'x';
if (n.Between(0xD1B9, 0xD4D0)) return 'y';
if (n.Between(0xD4D1, 0xD7F9)) return 'z';
if (n.Between(0xB0A1, 0xB0C4)) return 'A';
if (n.Between(0XB0C5, 0XB2C0)) return 'B';
if (n.Between(0xB2C1, 0xB4ED)) return 'C';
if (n.Between(0xB4EE, 0xB6E9)) return 'D';
if (n.Between(0xB6EA, 0xB7A1)) return 'E';
if (n.Between(0xB7A2, 0xB8c0)) return 'F';
if (n.Between(0xB8C1, 0xB9FD)) return 'G';
if (n.Between(0xB9FE, 0xBBF6)) return 'H';
if (n.Between(0xBBF7, 0xBFA5)) return 'J';
if (n.Between(0xBFA6, 0xC0AB)) return 'K';
if (n.Between(0xC0AC, 0xC2E7)) return 'L';
if (n.Between(0xC2E8, 0xC4C2)) return 'M';
if (n.Between(0xC4C3, 0xC5B5)) return 'N';
if (n.Between(0xC5B6, 0xC5BD)) return 'O';
if (n.Between(0xC5BE, 0xC6D9)) return 'P';
if (n.Between(0xC6DA, 0xC8BA)) return 'Q';
if (n.Between(0xC8BB, 0xC8F5)) return 'R';
if (n.Between(0xC8F6, 0xCBF9)) return 'S';
if (n.Between(0xCBFA, 0xCDD9)) return 'T';
if (n.Between(0xCDDA, 0xCEF3)) return 'W';
if (n.Between(0xCEF4, 0xD188)) return 'X';
if (n.Between(0xD1B9, 0xD4D0)) return 'Y';
if (n.Between(0xD4D1, 0xD7F9)) return 'Z';
return '\0';
}
......
......@@ -150,6 +150,16 @@ namespace Tools.Properties {
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 删除 {
get {
object obj = ResourceManager.GetObject("删除", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
......
......@@ -145,6 +145,9 @@
<data name="分析" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\分析.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="删除" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\删 除.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="加载" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\加载.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
......
......@@ -358,5 +358,8 @@
<ItemGroup>
<None Include="Resources\复制.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\删 除.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
......@@ -28,18 +28,26 @@
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(wModuleManager));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.tsbAdd = new System.Windows.Forms.ToolStripButton();
this.tsbCopy = new System.Windows.Forms.ToolStripButton();
this.tsbDel = new System.Windows.Forms.ToolStripButton();
this.tsbSave = new System.Windows.Forms.ToolStripButton();
this.tsbDbSetting = new System.Windows.Forms.ToolStripButton();
this.tslDbLinkString = new System.Windows.Forms.ToolStripLabel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.tvModules = new System.Windows.Forms.TreeView();
this.imgList5 = new System.Windows.Forms.ImageList(this.components);
this.panelMHeader = new System.Windows.Forms.Panel();
this.tbSearch = new System.Windows.Forms.TextBox();
this.label13 = new System.Windows.Forms.Label();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.dgvDetail = new System.Windows.Forms.DataGridView();
this.cmsDetail = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsmiAdd = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiDel = new System.Windows.Forms.ToolStripMenuItem();
this.tsFuncInfo = new System.Windows.Forms.ToolStrip();
this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();
this.tsBaseInfo = new System.Windows.Forms.ToolStrip();
......@@ -68,7 +76,7 @@
this.ckCanPassLevelReport = new System.Windows.Forms.CheckBox();
this.tbSysCode = new System.Windows.Forms.TextBox();
this.tbPrevID = new System.Windows.Forms.TextBox();
this.tsbSave = new System.Windows.Forms.ToolStripButton();
this.tsmiCopy = new System.Windows.Forms.ToolStripMenuItem();
this.toolStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
......@@ -77,6 +85,7 @@
this.panelMHeader.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dgvDetail)).BeginInit();
this.cmsDetail.SuspendLayout();
this.tsFuncInfo.SuspendLayout();
this.tsBaseInfo.SuspendLayout();
this.SuspendLayout();
......@@ -86,6 +95,7 @@
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsbAdd,
this.tsbCopy,
this.tsbDel,
this.tsbSave,
this.tsbDbSetting,
this.tslDbLinkString});
......@@ -111,6 +121,22 @@
this.tsbCopy.Size = new System.Drawing.Size(52, 22);
this.tsbCopy.Text = "复制";
//
// tsbDel
//
this.tsbDel.Image = ((System.Drawing.Image)(resources.GetObject("tsbDel.Image")));
this.tsbDel.ImageTransparentColor = System.Drawing.Color.Magenta;
this.tsbDel.Name = "tsbDel";
this.tsbDel.Size = new System.Drawing.Size(52, 22);
this.tsbDel.Text = "删除";
//
// tsbSave
//
this.tsbSave.Image = global::Tools.Properties.Resources.保存;
this.tsbSave.ImageTransparentColor = System.Drawing.Color.Magenta;
this.tsbSave.Name = "tsbSave";
this.tsbSave.Size = new System.Drawing.Size(52, 22);
this.tsbSave.Text = "保存";
//
// tsbDbSetting
//
this.tsbDbSetting.Image = global::Tools.Properties.Resources.数据库;
......@@ -154,11 +180,21 @@
// tvModules
//
this.tvModules.Dock = System.Windows.Forms.DockStyle.Fill;
this.tvModules.ImageIndex = 0;
this.tvModules.ImageList = this.imgList5;
this.tvModules.Location = new System.Drawing.Point(0, 39);
this.tvModules.Name = "tvModules";
this.tvModules.SelectedImageIndex = 0;
this.tvModules.Size = new System.Drawing.Size(259, 502);
this.tvModules.TabIndex = 1;
//
// imgList5
//
this.imgList5.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgList5.ImageStream")));
this.imgList5.TransparentColor = System.Drawing.Color.Transparent;
this.imgList5.Images.SetKeyName(0, "tv5-gray.png");
this.imgList5.Images.SetKeyName(1, "tv5-red.png");
//
// panelMHeader
//
this.panelMHeader.BackColor = System.Drawing.SystemColors.Control;
......@@ -250,6 +286,7 @@
this.dgvDetail.BackgroundColor = System.Drawing.SystemColors.Window;
this.dgvDetail.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.tableLayoutPanel1.SetColumnSpan(this.dgvDetail, 8);
this.dgvDetail.ContextMenuStrip = this.cmsDetail;
this.dgvDetail.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgvDetail.Location = new System.Drawing.Point(3, 138);
this.dgvDetail.Name = "dgvDetail";
......@@ -258,6 +295,27 @@
this.dgvDetail.Size = new System.Drawing.Size(708, 400);
this.dgvDetail.TabIndex = 1;
//
// cmsDetail
//
this.cmsDetail.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsmiAdd,
this.tsmiCopy,
this.tsmiDel});
this.cmsDetail.Name = "cmsDetail";
this.cmsDetail.Size = new System.Drawing.Size(181, 92);
//
// tsmiAdd
//
this.tsmiAdd.Name = "tsmiAdd";
this.tsmiAdd.Size = new System.Drawing.Size(180, 22);
this.tsmiAdd.Text = "増行";
//
// tsmiDel
//
this.tsmiDel.Name = "tsmiDel";
this.tsmiDel.Size = new System.Drawing.Size(180, 22);
this.tsmiDel.Text = "删行";
//
// tsFuncInfo
//
this.tableLayoutPanel1.SetColumnSpan(this.tsFuncInfo, 8);
......@@ -528,13 +586,11 @@
this.tbPrevID.Size = new System.Drawing.Size(97, 21);
this.tbPrevID.TabIndex = 28;
//
// tsbSave
// tsmiCopy
//
this.tsbSave.Image = global::Tools.Properties.Resources.保存;
this.tsbSave.ImageTransparentColor = System.Drawing.Color.Magenta;
this.tsbSave.Name = "tsbSave";
this.tsbSave.Size = new System.Drawing.Size(52, 22);
this.tsbSave.Text = "保存";
this.tsmiCopy.Name = "tsmiCopy";
this.tsmiCopy.Size = new System.Drawing.Size(180, 22);
this.tsmiCopy.Text = "复制";
//
// wModuleManager
//
......@@ -558,6 +614,7 @@
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.dgvDetail)).EndInit();
this.cmsDetail.ResumeLayout(false);
this.tsFuncInfo.ResumeLayout(false);
this.tsFuncInfo.PerformLayout();
this.tsBaseInfo.ResumeLayout(false);
......@@ -610,5 +667,11 @@
private System.Windows.Forms.TextBox tbSysCode;
private System.Windows.Forms.TextBox tbPrevID;
private System.Windows.Forms.ToolStripButton tsbSave;
private System.Windows.Forms.ImageList imgList5;
private System.Windows.Forms.ToolStripButton tsbDel;
private System.Windows.Forms.ContextMenuStrip cmsDetail;
private System.Windows.Forms.ToolStripMenuItem tsmiAdd;
private System.Windows.Forms.ToolStripMenuItem tsmiDel;
private System.Windows.Forms.ToolStripMenuItem tsmiCopy;
}
}
\ No newline at end of file
......@@ -17,6 +17,33 @@ namespace Tools.UI
{
public partial class wModuleManager : wEditBasic
{
/// <summary>
/// 树形图-数据源
/// </summary>
DataTable _dtModel = null;
/// <summary>
/// 明细表格-数据源
/// </summary>
DataTable _dtDetail = null;
#region 树节点-相关属性
/// <summary>
/// 树形图-父键列
/// </summary>
string ParentColumn => "PrevID";
/// <summary>
/// 树形图-主键列
/// </summary>
string NodeKeyColumn => "ID";
/// <summary>
/// 树形图-名称列
/// </summary>
string NodeTextColumn => "Name";
#endregion
public wModuleManager()
{
InitializeComponent();
......@@ -24,10 +51,16 @@ namespace Tools.UI
private void wModuleManager_Load(object sender, EventArgs e)
{
//工具栏事件
this.tsbAdd.Click += TsbAdd_Click;
this.tsbCopy.Click += TsbCopy_Click;
this.tsbDel.Click += TsbDel_Click;
this.tsbSave.Click += TsbSave_Click;
this.tsbDbSetting.Click += TsbDbSetting_Click;
//上下文菜单事件
this.tsmiAdd.Click += TsmiAdd_Click;
this.tsmiCopy.Click += TsmiCopy_Click;
this.tsmiDel.Click += TsmiDel_Click;
}
public override void InitData()
......@@ -39,18 +72,23 @@ namespace Tools.UI
new TQuery("SysFunction"),
};
this._ds = this._db.GetData(this.ModuleTableList, true);
this._dtModel = this._ds.Tables["SysBusinessModel"];
this._dtDetail = this._ds.Tables["SysFunction"];
}
public override void InitUI()
{
base.InitUI();
//绑定明细数据源
this.dgvDetail.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
this.dgvDetail.AllowUserToAddRows = false;
this.dgvDetail.DataSource = this._ds.Tables["SysFunction"].DefaultView;
this.dgvDetail.DataSource = this._dtDetail.DefaultView;
//初始化树形图
this.InitTreeView();
//模块查询
this.tbSearch.TextChanged += TbSearch_TextChanged;
//输入模块名称,自动生成字符串ID
this.tbName.TextChanged += TbName_TextChanged;
}
#region 工具栏事件
......@@ -67,17 +105,57 @@ namespace Tools.UI
}
private void TsbAdd_Click(object sender, EventArgs e)
{
Utils.Tip("功能正在开发中!");
this.AddNode();
}
private void TsbCopy_Click(object sender, EventArgs e)
{
Utils.Tip("功能正在开发中!");
//复制节点
var key = this.AddNode(IsCopy: true);
//复制功能表
var dt = this._dtDetail;
var rows = dt.Select($"ModelID = {key}");
foreach (DataRow r in rows)
{
var drNew = dt.GetNewRow();
Utils.CopyRow(r, drNew, new List<string> { "ModelID" });
dt.Rows.Add(drNew);
}
}
private void TsbDel_Click(object sender, EventArgs e)
{
this.DeleteNode();
}
private void TsbSave_Click(object sender, EventArgs e)
{
this.Save();
}
#endregion
#region 上下文菜单事件
private void TsmiAdd_Click(object sender, EventArgs e)
{
this._dtDetail.Rows.Add(this._dtDetail.GetNewRow());
}
private void TsmiCopy_Click(object sender, EventArgs e)
{
for (int i = 0; i < dgvDetail.SelectedRows.Count; i++)
{
int RowIndex = dgvDetail.SelectedRows[i].Index;
DataRow drNew = this._dtDetail.NewRow();
Utils.CopyRow(this._dtDetail.DefaultView[RowIndex].Row, drNew); //不复制ID列
this._dtDetail.Rows.Add(drNew);
}
}
private void TsmiDel_Click(object sender, EventArgs e)
{
var RowIndexList = from row in dgvDetail.SelectedRows
.Cast<DataGridViewRow>()
orderby row.Index descending //倒序排序
select row.Index;
RowIndexList.ToList().ForEach(i => this._dtDetail.DefaultView[i].Delete());
}
#endregion
#region 树结构处理
......@@ -89,7 +167,7 @@ namespace Tools.UI
private void InitTreeView()
{
//初始化树节点
this.AddTreeNode(this.tvModules.Nodes, "0");
this.InitTreeNode(this.tvModules.Nodes, "0");
//添加选择后事件
this.tvModules.AfterSelect += Tv_AfterSelect;
//默认展开设置
......@@ -115,7 +193,7 @@ namespace Tools.UI
private void Tv_AfterSelect(object sender, TreeViewEventArgs e)
{
var ModelID = e.Node.Name;
var drv = this._ds.Tables["SysBusinessModel"].DefaultView
var drv = this._dtModel.DefaultView
.Cast<DataRowView>()
.FirstOrDefault(r => r["ID"].ToString().Equals(ModelID));
if (drv != null)
......@@ -123,31 +201,122 @@ namespace Tools.UI
//绑定基本信息
this.BindBaseInfo(drv);
//筛选明细:明细不需要重复绑定
this._ds.Tables["SysFunction"].DefaultView.RowFilter = $"ModelID = {ModelID}";
this._dtDetail.DefaultView.RowFilter = $"ModelID = {ModelID}";
}
}
/// <summary>
/// 添加树节点
/// </summary>
/// <param name="IsCopy"></param>
/// <returns></returns>
private string AddNode(bool IsCopy = false)
{
//获取当前节点行
var drCurrent = this.GetCurrentNodeRow();
var ParentKey = drCurrent[this.ParentColumn].ToString();
//创建数据源
int index = this._dtModel.Select($"{NodeTextColumn} like '新模块%'").Length;
string text = $"新模块{index}";
var drNew = this._dtModel.NewRow();
drNew[this.ParentColumn] = ParentKey;
drNew[NodeTextColumn] = text;
if (IsCopy)
{
Utils.CopyRow(drCurrent, drNew, new List<string> { this.ParentColumn, this.NodeKeyColumn, this.NodeTextColumn });
}
this._dtModel.Rows.Add(drNew);
//创建树节点
string key = drNew[this.NodeKeyColumn].ToString();
var ParentNode = this.SearchNode(ParentKey);
var node = new TreeNode(text, 0, 1)
{
Name = key,
};
ParentNode.Nodes.Add(node);
//选中新增节点
this.tvModules.SelectedNode = node;
//返回值
return IsCopy ? drCurrent[this.NodeKeyColumn].ToString() : "";
}
/// <summary>
/// 删除树节点
/// </summary>
public void DeleteNode()
{
var CurrentNode = this.tvModules.SelectedNode;
var ParentNode = CurrentNode.Parent;
if (CurrentNode.Nodes.Count > 0)
{
Utils.Tip($"当前节点[{CurrentNode.Text}]有多个子节点,请先删除子节点!");
return;
}
//删除数据源
var drCurrent = this.GetCurrentNodeRow();
drCurrent?.Delete();
//移除树节点
var nodes = ParentNode == null ? this.tvModules.Nodes : ParentNode.Nodes;
nodes.Remove(CurrentNode);
}
/// <summary>
/// 查找树节点
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private TreeNode SearchNode(string key)
{
return this.SearchTreeNode(key, this.tvModules.Nodes);
}
/// <summary>
/// 获取当前节点行
/// </summary>
/// <returns></returns>
private DataRow GetCurrentNodeRow()
{
var key = this.tvModules.SelectedNode.Name;
return this._dtModel.Select($"{this.NodeKeyColumn}={key}").FirstOrDefault();
}
/// <summary>
/// 递归:添加树节点
/// </summary>
/// <param name="nodes"></param>
/// <param name="ParentValue"></param>
private void AddTreeNode(TreeNodeCollection nodes, string ParentValue)
private void InitTreeNode(TreeNodeCollection nodes, string ParentValue)
{
DataRow[] rows = this._ds.Tables["SysBusinessModel"].Select($"ISNULL(PrevID, '0') = '{ParentValue}'");
DataRow[] rows = this._dtModel.Select($"ISNULL({this.ParentColumn}, '0') = '{ParentValue}'");
if (rows.Length == 0)
return;
for (int i = 0; i < rows.Length; i++)
{
if (rows[i].RowState == DataRowState.Deleted)
continue;
var key = rows[i]["ID"].ToString();
var text = rows[i]["Name"].ToString();
var key = rows[i][this.NodeKeyColumn].ToString();
var text = rows[i][this.NodeTextColumn].ToString();
nodes.Add(key, text, 0, 1);
this.AddTreeNode(nodes[i].Nodes, key);
this.InitTreeNode(nodes[i].Nodes, key);
}
}
/// <summary>
/// 递归:查找树节点
/// </summary>
/// <param name="key"></param>
/// <param name="nodes"></param>
/// <returns></returns>
private TreeNode SearchTreeNode(string key, TreeNodeCollection nodes)
{
TreeNode result = null;
foreach (TreeNode n in nodes)
{
result = n.Name.Equals(key) ? n : this.SearchTreeNode(key, n.Nodes);
if (result != null)
break;
}
return result;
}
#endregion
#region 查询功能相关
......@@ -268,5 +437,13 @@ namespace Tools.UI
#endregion
#region 便捷操作:字符串ID-自动生成
private void TbName_TextChanged(object sender, EventArgs e)
{
this.tbStringID.Text = Utils.GetPinyinString(this.tbName.Text);
}
#endregion
}
}
......@@ -120,6 +120,74 @@
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tsbDel.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="imgList5.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>634, 18</value>
</metadata>
<data name="imgList5.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADo
CAAAAk1TRnQBSQFMAgEBAgEAAUABAAFAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/0MAAfIK8AHyBAABGgpv
ARokAAEHCvABBwQAASUKbwElJAABBwH0CAAB9AEHBAABJQHzCAAB8wElJAABBwH0AQAG9AEAAfQBBwQA
ASUB8wEABvMBAAHzASUkAAEHAfQBAAHwBAcB8AEAAfQBBwQAASUB8wEAAW8EJQFvAQAB8wElJAABBwH0
CAAB9AEHBAABJQHzCAAB8wElJAABBwH0AQAG8AEAAfQBBwQAASUB8wEABm8BAAHzASUkAAEHAfQBAAbw
AQAB9AEHBAABJQHzAQAGbwEAAfMBJSQAAQcB9AgAAfQBBwQAASUB8wgAAfMBJSQAAQcB9AEAAfAEBwHw
AQAB9AEHBAABJQHzAQABbwQlAW8BAAHzASUkAAEHAfQBAAb0AQAB9AEHBAABJQHzAQAG8wEAAfMBJSQA
AQcB9AgAAfQBBwQAASUB8wgAAfMBJSQAAQcK8AEHBAABJQpvASUkAAHyCvAB8gQAARoKbwEaYgABQgFN
AT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEABP8EAAHAAQMBwAEDBAABwAEDAcABAwQA
Ac8B8wHPAfMEAAHIARMByAETBAAByAETAcgBEwQAAc8B8wHPAfMEAAHIARMByAETBAAByAETAcgBEwQA
Ac8B8wHPAfMEAAHIARMByAETBAAByAETAcgBEwQAAc8B8wHPAfMEAAHAAQMBwAEDBAABwAEDAcABAwQA
BP8EAAs=
</value>
</data>
<metadata name="cmsDetail.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>735, 18</value>
</metadata>
<metadata name="tsFuncInfo.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>408, 18</value>
</metadata>
......@@ -127,6 +195,6 @@
<value>521, 18</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>41</value>
<value>243</value>
</metadata>
</root>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment