Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
F
Ftt_Common
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Ftt_Common
Commits
002ee8ba
Commit
002ee8ba
authored
Jan 06, 2021
by
tr
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、模块管理:基础增删功能
parent
caf3243d
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
395 additions
and
80 deletions
+395
-80
Utils.cs
Tools/MyUtils/Utils.cs
+52
-61
Resources.Designer.cs
Tools/Properties/Resources.Designer.cs
+10
-0
Resources.resx
Tools/Properties/Resources.resx
+3
-0
删 除.png
Tools/Resources/删 除.png
+0
-0
Tools.csproj
Tools/Tools.csproj
+3
-0
wModuleManager.Designer.cs
Tools/UI/wModuleManager.Designer.cs
+70
-7
wModuleManager.cs
Tools/UI/wModuleManager.cs
+188
-11
wModuleManager.resx
Tools/UI/wModuleManager.resx
+69
-1
No files found.
Tools/MyUtils/Utils.cs
View file @
002ee8ba
...
...
@@ -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
GetDefault
PrimaryKey
(
DataColumn
c
)
private
static
string
GetDefault
ColumnValue
(
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'
;
}
...
...
Tools/Properties/Resources.Designer.cs
View file @
002ee8ba
...
...
@@ -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>
...
...
Tools/Properties/Resources.resx
View file @
002ee8ba
...
...
@@ -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>
...
...
Tools/Resources/删 除.png
0 → 100644
View file @
002ee8ba
789 Bytes
Tools/Tools.csproj
View file @
002ee8ba
...
...
@@ -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
Tools/UI/wModuleManager.Designer.cs
View file @
002ee8ba
...
...
@@ -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
.
ts
bSave
=
new
System
.
Windows
.
Forms
.
ToolStripButton
();
this
.
ts
miCopy
=
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
;
//
// ts
bSave
// ts
miCopy
//
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
Tools/UI/wModuleManager.cs
View file @
002ee8ba
...
...
@@ -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
.
_d
s
.
Tables
[
"SysFunction"
]
.
DefaultView
;
this
.
dgvDetail
.
DataSource
=
this
.
_d
tDetail
.
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
.
Add
TreeNode
(
this
.
tvModules
.
Nodes
,
"0"
);
this
.
Init
TreeNode
(
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
.
_d
s
.
Tables
[
"SysBusinessModel"
]
.
DefaultView
var
drv
=
this
.
_d
tModel
.
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
Add
TreeNode
(
TreeNodeCollection
nodes
,
string
ParentValue
)
private
void
Init
TreeNode
(
TreeNodeCollection
nodes
,
string
ParentValue
)
{
DataRow
[]
rows
=
this
.
_d
s
.
Tables
[
"SysBusinessModel"
].
Select
(
$"ISNULL(PrevID
, '0') = '
{
ParentValue
}
'"
);
DataRow
[]
rows
=
this
.
_d
tModel
.
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
}
}
Tools/UI/wModuleManager.resx
View file @
002ee8ba
...
...
@@ -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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment