ASP.NET 魔法學院
posts - 69, comments - 297, trackbacks - 21, articles - 0
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
扩展 CheckBoxList 控件 - 系结复选项目
Posted on 2008-05-26 08:10
jeff377
阅读(1514)
评论(5)
编辑
收藏
所属分类:
Server Control
摘要
CheckBoxList 控件是使用在项目复选的状态,我们可以使用一个整数值来描述复选项目,项目值以 2 的 N 次方来描述。例如
选项一 = 2^0 = 1
选项二 = 2^1 = 2
选项三 = 2^2 = 4
选项四 = 2^3 = 8
... 依此类推
当复选了「选项一」及「选项三」,则复选值为 1+4=5。当复选了「选项二」及「选项四」,则复选值为 2+8=10。若要使用上述的方式来描述复选项目,一般要自行撰写程序代码来处理。本文将扩展 CheckBoxList 控件,新增一个 FlagValue 属性,直接可以双向系结这个复选值。
扩展 CheckBoxList 控件
继承 CheckBoxList 命名为 TBCheckBoxList,新增一个 FlagValue 属性。当取得 FlagValue 值时,会使用 GetFlagValue 方法取的复选的项目对应的值,当设定 FlagValue 值时,会使用 SetFlagValue 方法将值反应至复选项目。
1
Imports
System.Web.UI.WebControls
2
Imports
System.ComponentModel
3
4
Namespace WebControls
Namespace
WebControls
5
Public
Class TBCheckBoxList
Class
TBCheckBoxList
6
Inherits
CheckBoxList
7
8
/**/
'''
<summary>
9
'''
项目复选的 Flag 值。
10
'''
</summary>
11
<
Bindable(
True
)
>
_
12
Public
Property FlagValue()
Property
FlagValue()
As
Integer
13
Get
14
Return
GetFlagValue()
15
End
Get
16
Set
(
ByVal
value
As
Integer
)
17
SetFlagValue(value)
18
End
Set
19
End Property
20
21
/**/
'''
<summary>
22
'''
取得 Flag 值。
23
'''
</summary>
24
Private
Function GetFlagValue()
Function
GetFlagValue()
As
Integer
25
Dim
iFlagValue
As
Integer
26
Dim
iValue
As
Integer
27
Dim
oItem
As
ListItem
28
Dim
N1
As
Integer
29
30
iFlagValue
=
0
31
For
N1
=
0
To
Me
.Items.Count
-
1
32
oItem
=
Me
.Items(N1)
33
If
oItem.Selected
Then
34
iValue
=
CInt
(
2
^
N1)
'
2 的 N 次方
35
iFlagValue
=
iFlagValue
+
iValue
36
End
If
37
Next
38
Return
iFlagValue
39
End Function
40
41
/**/
'''
<summary>
42
'''
设定 Flag 值。
43
'''
</summary>
44
'''
<param name="Value">
Flag 值。
</param>
45
Private
Sub SetFlagValue()
Sub
SetFlagValue(
ByVal
Value
As
Integer
)
46
Dim
iFlagValue
As
Integer
47
Dim
iBase
As
Integer
48
Dim
iValue
As
Integer
49
50
Me
.ClearSelection()
51
iFlagValue
=
Value
52
iBase
=
0
53
While
iBase
<=
iFlagValue
54
iValue
=
CInt
(
2
^
iBase)
'
2 的 N 次方
55
If
(iFlagValue
And
iValue)
=
iValue
Then
56
Me
.Items(iBase).Selected
=
True
57
iFlagValue
=
iFlagValue
-
iValue
58
End
If
59
iBase
=
iBase
+
1
60
End
While
61
End Sub
62
63
End Class
64
End Namespace
测试程序
在页面上放置 TBCheckBoxList 控件,我们只要使用 FlagValue 属性值,就可以轻易的取得或设定复选值。
1
Protected
Sub btnGetFlagValue_Click()
Sub
btnGetFlagValue_Click(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
btnGetFlagValue.Click
2
txtValue.Text
=
CheckBoxList1.FlagValue.ToString
3
End Sub
4
5
Protected
Sub btnSetFlagValue_Click()
Sub
btnSetFlagValue_Click(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
btnSetFlagValue.Click
6
CheckBoxList1.FlagValue
=
CInt
(txtValue.Text)
7
End Sub
如果 TBCheckBoxList.FlagValue 需要系结字段时,只需直接设定即可
Tag标签:
CheckBoxList
,
ServerControl
Feedback
#1楼
回复
引用
查看
2008-05-26 08:26 by
金色海洋(jyk)
CheckBoxList 每一个item都有一个value呀,用这个不是更方便吗?
http://www.cnblogs.com/jyk/archive/2008/02/26/1082805.html
我是这么处理的。
#2楼
[
楼主
]
回复
引用
查看
2008-05-26 13:00 by
jeff377
@金色海洋(jyk)
使用整數值來表達複選是有使用時機的,例如權限設定「瀏覽=1 新增=2 修改=4 刪除=5」,當使用者判斷該表單是否有修改權時,只需要判斷 (權限值 And 4)=4 就代表有修改權。
#3楼
回复
引用
2008-05-26 22:51 by
C#爱好者 [未注册用户]
item都有value,用这个不是更方便吗?
#4楼
[
楼主
]
回复
引用
查看
2008-05-26 23:17 by
jeff377
@C#爱好者
看你的需求選擇合適的就行了。
#5楼
回复
引用
查看
2008-05-26 23:18 by
蜀山雪狼
博主的方法,我在03用过,不错的说。支持一下。
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
扩展 CheckBoxList 控件 - 系结复选项目(2)
扩展 CheckBoxList 控件 - 系结复选项目
扩展GridView控件(索引) - 增加多个常用功能
vs2005入门 之 单选列表(CheckBoxList)和复选列表(RadioButtonList)[视频]
ObjectDataSoruce 系结 BusinessObject 控件
《构建可扩展的Web站点》书评
相关链接:
所属分类的其他文章:
扩展 Calendar 控件 - DayCommand 事件
让 SqlDataSource 的 SelectCommand 属性值不会消失
ObjectDataSoruce 系结 BusinessObject 控件
GridView 自动编号字段 - TBSerialNumberField
扩展 CheckBoxList 控件 - 系结复选项目(2)
扩展 CheckBoxList 控件 - 系结复选项目
扩展 GridView 控件 - 无数据时显示标题列
扩展 CheckBoxField 类别 - 支持非布尔值的双向系结
扩展 GridView 控件 - 支持 Excel 及 Word 汇出
扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态
最新IT新闻:
Google推出Android Market挑战App Store
美国年轻人最喜欢的15大网站
2008年8月30日IT博客精选
《极品飞车12》最新真人照片、游戏截图
IBM正在开发超强性能4TB固态硬盘阵列
博客园新闻频道
博客园首页
社区
Powered by:
博客园
Copyright © jeff377
日历
<
2008年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
公告
☆ 有些事現在不做,就一輩子都不會做了 ☆
与我互动
给我发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(1)
给我留言
查看私人留言
我参加的小组
jQuery
我的标签
GridView(12)
ServerControl(8)
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(18)
User Control
VB.NET(5)
常见问题
動態建立控制項(1)
软件架构/机制
随笔档案
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: SqlDataSource 執行資料篩選
--引用-------------------------------------------------- jeff377: @wuya2 <br>设定 FilterExpression...
--陈晨
2. re: 利用 BasePage 实作窗体权限控管
@mzc首先有个数据表去存放「用户/功能的权限设定」数据,包含「用户编号、功能代码、权限值」三个字段,可以透过特定组件去数据库抓取这个目前登入用户在该页面(功能)的权限值。...
--jeff377
3. re: 利用 BasePage 实作窗体权限控管
楼主,请问你的这个中间层获取权限值是用什么方法会比较好呢?
--mzc
4. re: 字符串中寻找关键词片段
@lexus
以「包含”连胡会”这个关键词片段,并包含关键词前后文各10个字符」这个案例来说,它的正则式为 “.{0,10}连胡会.{0,10}”
--jeff377
5. re: 字符串中寻找关键词片段
你的正则看的有点晕,你能把你的正则式子写出来,带点解释吗?
--lexus
阅读排行榜
1. 利用 BasePage 实作窗体权限控管(2646)
2. 十几行程序代码搞定 Master-Detail GridView(内含子 GridView)(2482)
3. 扩展 GridView 控件 - 无数据时显示标题列(2317)
4. 用属性封装 Session 及 VIewState 的存取(2250)
5. 维护 Panel 滚动条位置(2138)
评论排行榜
1. 扩展 GridView 控件 - 无数据时显示标题列(22)
2. 利用 BasePage 实作窗体权限控管(19)
3. 用属性封装 Session 及 VIewState 的存取(19)
4. 十几行程序代码搞定 Master-Detail GridView(内含子 GridView)(18)
5. 動態新增控制項與 ViewState(17)
60天内阅读排行
1. 撰写自用 Confirm 方法(1845)
2. BasePage 撰写 PageCommand 事件(958)
3. ScriptManager EnablePageMethods 与 JSON 序列化(873)
4. CallBack PageCommand 与 JSON 序列化(840)
5. BasePage 撰写 PageCommand 事件 (使用 CallBack)(768)