ASP.NET 魔法學院
博客园
首页
新随笔
联系
订阅
管理
86 Posts :: 0 Stories :: 301 Comments :: 22 Trackbacks
公告
☆ 有些事現在不做,就一輩子都不會做了 ☆
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(1)
给我留言
查看留言
我参加的小组
jQuery
我的标签
ServerControl
(23)
GridView
(12)
BasePage
(5)
SqlDataSource
(4)
javascript
(4)
FormView
(3)
CallBack
(3)
序列化
(3)
JSON
(3)
ClientScript
(3)
更多
随笔分类
AJAX(6)
API(3)
ASP.NET 基础(28)
ASP.NET 进阶(7)
CSS
DataSource 控件(2)
Enterprise Library
FormView
GridView(2)
JavaScript
jQuery
Server Control(33)
User Control
VB.NET(7)
常见问题
動態建立控制項(1)
软件架构/机制
随笔档案
2008年10月 (17)
2008年8月 (11)
2008年7月 (1)
2008年6月 (10)
2008年5月 (17)
2008年4月 (6)
2008年2月 (1)
2008年1月 (5)
2007年12月 (18)
部落格
ASP.NET 魔法學院(繁體)
topcat姍舞之間的極度凝聚
最新评论
1. re: 利用 BasePage 实作窗体权限控管
楼主,我想了很久,还是不太明白你的意思。你能留个QQ或者稍微做个简单的demo供我参考一下吗?谢谢了
--mzc
2. re: 利用 BasePage 实作窗体权限控管
@mzc
提供我的作法供你参考,我的BasePage会有一个FuncTag属性(功能代码),在取用户在该页面的权限时,会将FuncTag传给中间层以取得用户在该功能的权限。
--jeff377
3. re: 利用 BasePage 实作窗体权限控管
楼主,我根据你的写的,已经做出了我要的内容。但是现在唯一的一个问题就是,我给某个用户设置一些权限,该用户在在任何一个模块当中应用的权限是一样的。这样就有些不合理了。楼主能给点建议吗?
--mzc
4. re: SqlDataSource 執行資料篩選
@陈晨我当然了解由商业逻辑层去处理筛选是最好的,只是本文的重点是在SqlDataSoruce,是给使用SqlDataSoruce的使用者参考。我在撰写ASP.NET程序是完全不去使用SqlDataSo...
--jeff377
5. re: SqlDataSource 執行資料篩選
--引用-------------------------------------------------- jeff377: @wuya2 <br>设定 FilterExpression...
--陈晨
阅读排行榜
1. 利用 BasePage 实作窗体权限控管(2726)
2. 十几行程序代码搞定 Master-Detail GridView(内含子 GridView)(2569)
3. 扩展 GridView 控件 - 无数据时显示标题列(2493)
4. GridView+FormView 示范数据 新增/修改/删除(2294)
5. 用属性封装 Session 及 VIewState 的存取(2289)
评论排行榜
1. 扩展 GridView 控件 - 无数据时显示标题列(22)
2. 利用 BasePage 实作窗体权限控管(22)
3. 用属性封装 Session 及 VIewState 的存取(19)
4. 十几行程序代码搞定 Master-Detail GridView(内含子 GridView)(18)
5. 動態新增控制項與 ViewState(17)
60天内阅读排行
1. ScriptManager EnablePageMethods 与 JSON 序列化(1074)
2. CallBack PageCommand 与 JSON 序列化(1008)
3. [ASP.NET 控件实作 Day11] ActiveX 服务器控件(800)
4. 字符串中寻找关键词片段(748)
5. CallBack PageCommand 与 JSON 初体验(528)
扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态
摘要
延续前面「GridView+FormView 示范数据新增/修改/删除(进阶篇:服务器控件)」的文章,文章后记有提及若要达到零程序代码要求,上篇已实作「扩展 CommandField 类别 - Header 加入新增钮」解决其中一个问题。另一个问题就要扩展 TextBox 控件,让 TextBox 可以自行判断 FormView 的 CurrentMode 来决定 TextBox 的启用状态,本文接下来就是来说明如何扩展 TextBox 控件来达到此需求。
TBFormViewModeStatus 类别
首先我们先定义 TBFormViewModeStatus 类别,此类别是用来设定控件在每种 FormViewMode 的状态。TBFormViewModeStatus 类别具有 InsertMode、EditMode、BrowseMode 三个属性,分别用来设定 FormViewMode 为 Insert、Edit、ReadOnly 三种情形时,TextBox 控件的启用状态。
1
/**/
'''
<summary>
2
'''
控件状态列举。
3
'''
</summary>
4
Public
Enum EControlStatus
Enum
EControlStatus
5
/**/
'''
<summary>
6
'''
不设定。
7
'''
</summary>
8
NotSet
=
0
9
/**/
'''
<summary>
10
'''
启用。
11
'''
</summary>
12
Enable
=
1
13
/**/
'''
<summary>
14
'''
不启用。
15
'''
</summary>
16
Disable
=
2
17
End Enum
18
19
/**/
'''
<summary>
20
'''
依 FormViewMode 来设定控件状态。
21
'''
</summary>
22
<
_
23
Serializable(), _
24
TypeConverter(
GetType
(ExpandableObjectConverter)) _
25
>
_
26
Public
Class TBFormViewModeStatus
Class
TBFormViewModeStatus
27
Private
FInsertMode
As
EControlStatus
=
EControlStatus.NotSet
28
Private
FEditMode
As
EControlStatus
=
EControlStatus.NotSet
29
Private
FBrowseMode
As
EControlStatus
=
EControlStatus.NotSet
30
31
/**/
'''
<summary>
32
'''
在新增模式(FormViewMode=Insert)的控件状态。
33
'''
</summary>
34
<
_
35
NotifyParentProperty(
True
), _
36
DefaultValue(
GetType
(EControlStatus),
"
NotSet
"
) _
37
>
_
38
Public
Property InsertMode()
Property
InsertMode()
As
EControlStatus
39
Get
40
Return
FInsertMode
41
End
Get
42
Set
(
ByVal
value
As
EControlStatus)
43
FInsertMode
=
value
44
End
Set
45
End Property
46
47
/**/
'''
<summary>
48
'''
在编辑模式(FormViewMode=Edit)的控件状态。
49
'''
</summary>
50
<
_
51
NotifyParentProperty(
True
), _
52
DefaultValue(
GetType
(EControlStatus),
"
NotSet
"
) _
53
>
_
54
Public
Property EditMode()
Property
EditMode()
As
EControlStatus
55
Get
56
Return
FEditMode
57
End
Get
58
Set
(
ByVal
value
As
EControlStatus)
59
FEditMode
=
value
60
End
Set
61
End Property
62
63
/**/
'''
<summary>
64
'''
在浏览模式(FormViewMode=ReadOnly)的控件状态。
65
'''
</summary>
66
<
_
67
NotifyParentProperty(
True
), _
68
DefaultValue(
GetType
(EControlStatus),
"
NotSet
"
) _
69
>
_
70
Public
Property BrowseMode()
Property
BrowseMode()
As
EControlStatus
71
Get
72
Return
FBrowseMode
73
End
Get
74
Set
(
ByVal
value
As
EControlStatus)
75
FBrowseMode
=
value
76
End
Set
77
End Property
78
End Class
扩展 TBTextBox 控件
接下来就是改写 TextBox 控件,我们继承 TextBox 类别命名为 TBTextBox,加入一个 FormViewModeStatus 属性( TBFormViewModeStatus 型别),用来设定控件在每种 FormViewMode 的状态,例如设定 FormViewModeStatus.InsertMode 可以设定 FormViewMode.Insert 情形时,控件状态为「不设定、启用、不启用」三择一。主要的作法是覆写 OnPreRender 方法,在此方法中去呼叫 DoFormViewModeStatus 方法,自行判断 TextBox 所属 FormView 的 CurrentMode 来决定本身的状态。
1
Imports
System
2
Imports
System.ComponentModel
3
Imports
System.Drawing
4
Imports
System.Web
5
Imports
System.Web.UI
6
Imports
System.Web.UI.WebControls
7
Imports
System.Security.Permissions
8
9
Namespace WebControls
Namespace
WebControls
10
<
_
11
Description(
"
文字框控件
"
), _
12
ToolboxData(
"
<{0}:TBTextBox runat=server></{0}:TBTextBox>
"
) _
13
>
_
14
Public
Class TBTextBox
Class
TBTextBox
15
Inherits
TextBox
16
Private
FFormViewModeStatus
As
TBFormViewModeStatus
17
18
/**/
'''
<summary>
19
'''
依 FormViewMode 来设定控件状态。
20
'''
</summary>
21
'''
<value></value>
22
'''
<returns></returns>
23
'''
<remarks></remarks>
24
<
_
25
Description(
"
依 FormViewMode 来设定控件状态
"
), _
26
NotifyParentProperty(
True
), _
27
DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
28
PersistenceMode(PersistenceMode.InnerProperty), _
29
DefaultValue(
""
) _
30
>
_
31
Public
ReadOnly
Property FormViewModeStatus()
Property
FormViewModeStatus()
As
TBFormViewModeStatus
32
Get
33
If
FFormViewModeStatus
Is
Nothing
Then
34
FFormViewModeStatus
=
New
TBFormViewModeStatus
35
End
If
36
Return
FFormViewModeStatus
37
End
Get
38
End Property
39
40
/**/
'''
<summary>
41
'''
处理控件状态。
42
'''
</summary>
43
'''
<param name="ControlStatus">
控件状态。
</param>
44
Private
Sub DoControlStatus()
Sub
DoControlStatus(
ByVal
ControlStatus
As
EControlStatus)
45
Select
Case
ControlStatus
46
Case
EControlStatus.Enable
47
Me
.Enabled
=
True
48
Case
EControlStatus.Disable
49
Me
.Enabled
=
False
50
End
Select
51
End Sub
52
53
/**/
'''
<summary>
54
'''
依 FormView 的模式来处理控件状态。
55
'''
</summary>
56
Private
Sub DoFormViewModeStatus()
Sub
DoFormViewModeStatus()
57
Dim
oFormView
As
FormView
58
59
'
若控件置于 FormView 中,则依 FormView 的模式来处理控件状态
60
If
TypeOf
Me
.BindingContainer
Is
FormView
Then
61
oFormView
=
DirectCast
(
Me
.BindingContainer, FormView)
62
Select
Case
oFormView.CurrentMode
63
Case
FormViewMode.Insert
64
DoControlStatus(
Me
.FormViewModeStatus.InsertMode)
65
Case
FormViewMode.Edit
66
DoControlStatus(
Me
.FormViewModeStatus.EditMode)
67
Case
FormViewMode.ReadOnly
68
DoControlStatus(
Me
.FormViewModeStatus.BrowseMode)
69
End
Select
70
End
If
71
End Sub
72
73
/**/
'''
<summary>
74
'''
覆写。引发 PreRender 事件。
75
'''
</summary>
76
Protected
Overrides
Sub OnPreRender()
Sub
OnPreRender(
ByVal
e
As
EventArgs)
77
MyBase
.OnPreRender(e)
78
'
依 FormView 的模式来处理控件状态
79
DoFormViewModeStatus()
80
End Sub
81
82
End Class
83
End Namespace
使用 TBTextBox 控件
将 TBTextBox 放置 FormView 的 EditItemTemplate(Edit 及 Insert 共享 Template,即 InsertItemTemplate=EditItemTemplate)中,在 TBTextBox 的属性窗口中就可以直接设定 FormViewModeStatus 属性即可。如此就可以不用麻烦的判断 FormView 的 CurrentMode,又要 FindControl 来做相关设定,就可以真正达到零程序代码的要求了。
<
bee:TBTextBox
ID
="txtEmployeeID"
runat
="server"
Text
='<%#
Bind("EmployeeID") %
>
'>
<
FormViewModeStatus
InsertMode
="Enable"
EditMode
="Disable"
/>
</
bee:TBTextBox
>
Tag标签:
TextBox
,
FormView
,
ServerControl
posted on 2008-05-14 22:58
jeff377
阅读(1200)
评论(1)
编辑
收藏
网摘
所属分类:
Server Control
Feedback
#1楼
2008-05-15 17:40
流の星
嗯,写的不错,要是能给出个效果图就更好了~
回复
引用
查看
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索
相关文章:
控件之ViewState
[翻译]在Visual Studio 2005中调试SQL Server 2005的存储过程
扩展GridView控件(索引) - 增加多个常用功能
【整理】【最近更新日期:2005-10-15】【找工作必读!】来自IT公司速查手册的各大IT公司薪资和待遇内幕
FireFox游戏类扩展集合
Virtual Earth ASP.NET 控件将于 7 月发布
创建继承于Sys.UI.Control的可视客户端控件的问题
扩展控件问题 ExtenderControl
微软Ajax Control Toolkit 34个服务器端控件
我扩展了个日历控件
相关链接:
所属分类的其他文章:
[ASP.NET 控件实作 Day15] 复合控件隐藏的问题
[ASP.NET 控件实作 Day14] 继承 CompositeControl 实作 Toolbar 控件
[ASP.NET 控件实作 Day13] Flash 控件
[ASP.NET 控件实作 Day12] 继承 TBActiveX 重新改写 TBMediaPlayer 控件
[ASP.NET 控件实作 Day11] ActiveX 服务器控件
[ASP.NET 控件实作 Day10] Media Player 控件