4.当移动光标到“OnMouseOver事件演示“按钮时,该按钮背景色变为淡绿色:
+ \$ ^- O4 k8 ` [7 X3 N2 s5.当光标移动到“OnMouseOut事件演示“按钮时,该按钮的字体变为黑体,但是我们需观察的却是再移开光标后,字体是否恢复正常,结论是会的,这里只给出了移动到该按钮时的画面,移开后的画面由于和开始画面一样,就不演示了。
$ s; Y3 L o" z$ @" N2.2.4 复选控件9 w$ i) L1 Y! W2 ` x/ y8 l6 E
在日常信息输入中,我们会遇到这样的情况,输入的信息只有两种可能性(例如:性别、婚否之类),如果采用文本输入的话,一者输入繁琐,二者无法对输入信息的有效性进行控制,这时如果采用复选控件(CheckBox),就会大大减轻数据输入人员的负担,同时输入数据的规范性得到了保证。
$ e" X$ N) E* ^( iCheckBox的使用比较简单,主要使用id属性和text属性。Id属性指定对复选控件实例的命名,Text属性主要用于描述选择的条件。另外当复选控件被选择以后,通常根据其Checked属性是否为真来判断用户选择与否。# d" @. @ h. u+ D
例如:使用复选控件5 E8 s' S( C: g8 s w
…
$ K' B7 k8 a* ~1 I<asp:CheckBox id=”chkbox1” text=”中国人” runat=server/>
3 I- o- F4 n( v; p( i3 ~ …
, r7 ]7 z' Z8 A+ s- K0 f0 O 判断条件满足否:
, N* m3 @% k0 K: X R; s- F# |…
! j, f( Z3 h# HIf chkbox1.Checked=True
) G' H# T7 p5 n/ QLblTxt.text=”是中国人”
& h; l/ W: ]. p% U ~Else
5 s7 ^- R* }8 u, yLblTxt.text=”不是中国人”
% Y6 n& W3 h1 J: G! FEnd If& ^9 U; h+ T7 s
…
+ ]7 W9 p( ]4 n9 ~( u) e2.2.5 单选控件
) D8 A% B+ } `1 ?0 j使用单选控件的情况跟使用复选控件的条件差不多,区别的地方在于,单选控件的选择可能性不一定是两种,只要是有限种可能性,并且只能从中选择一种结果,在原则上都可以用单选控件(RadioButton)来实现。
: A/ D5 a6 v$ k" b- h单选控件主要的属性跟复选控件也类似,也有id属性、text属性,同样也依靠Checked属性来判断是否选中,但是与多个复选控件之间互不相关不同,多个单选控件之间存在着联系,要么是同一选择中的条件,要么不是。所以单选控件多了一个GroupName属性,它用来指明多个单选控件是否是同一条件下的选择项,GroupName相同的多个单选控件之间只能有一个被选中。( O$ q( O' `# w/ q# `) V/ S6 k4 u9 d+ e
例如:对单选控件的使用
! H5 O( a; d9 ~…3 |, E7 n- `1 |: h" E/ @
年龄选择:
' W* H2 t/ x* R; V1 D5 Z5 y$ ~2 X, k<asp:RadioButton id=”rbtn11” text=”20岁以下” GroupName=”group1” runat=server /><br>: Z, p; C( S/ f% V' a' v( R: R3 N) R7 N
<asp:RadioButton id=”rbtn12” text=”20-30岁” GroupName=”group1” runat=server /><br>$ R4 ] V: H+ b
<asp:RadioButton id=”rbtn13” text=”30-40岁” GroupName=”group1” runat=server /><br>4 V) e8 ^, J. |5 ^+ `" Y; M) i
<asp:RadioButton id=”rbtn14” text=”40岁以上” GroupName=”group1” runat=server /><br>. h. k; ?5 X) r# K t7 J$ J/ K
工作收入:
9 v2 l/ e C3 Y2 d( g U<asp:RadioButton id=”rbtn21” text=”1000元以下” GroupName=”group2” runat=server /><br>
5 i8 ~ {( b. a<asp:RadioButton id=”rbtn22” text=”1000-2000元” GroupName=”group2” runat=server/><br>
* Z0 L- b! E' K. v( C/ W<asp:RadioButton id=”rbtn23” text=”2000元以上” GroupName=”group2” runat=server />* U$ a3 X' a3 s, V# B
…
9 `1 q- D7 I$ k% k对选择条件的判断:
! h+ ]7 R8 u% w…
! x. a, t1 m7 V7 @If rbtn11.Checked = True r0 Q, x7 V% j
LblResult1.text=”20岁以下”
7 d7 F: f: ?2 B/ o5 w- bElse if rbtn12.Checked = True
5 p4 f& F' j3 ]. f& d" d! g7 ^LblResult1.text=”20-30岁”
9 Y2 e V0 z1 P0 Y1 s/ s6 E, ZElse if rbtn13.Checked = True
( Z# C7 g6 v' X1 N- B: X$ _LblResult1.text=”30-40岁”
2 c- F" r: j2 e3 ZElse( y& o8 j2 d; U& I
LblResult1.text=”40岁以上”
$ h/ }3 h2 G) D, g) FEnd If9 k5 A% U- w1 O" Q0 J' \
If rbtn21.Checked = True
" Q: k( J, m: \" n. F' O9 ]LblResult2.text=”1000元以下”
i- E1 A% q: ?/ L) rElse if rbtn22.Checked = True
( U' l6 V1 Z$ b7 A4 OLblResult2.text=”1000-2000元”
& j* s3 v& e+ X" H/ pElse% M: U% S# S8 N9 a: p0 ]
LblResult.text=”2000元以上”1 ~5 |1 C0 k$ y* h
End If2 U) B1 M. H- z( C, o# V7 Z9 n* W
…
' i* H d6 U9 o2 `: }% D! u# m2.2.6 列表框
7 H9 e6 J0 L! B: q列表框(ListBox)是在一个文本框内提供多个选项供用户选择的控件,它比较类似于下拉列表,但是没有显示结果的文本框。到以后,我们会知道列表框实际上很少使用,大部分时候,我们都使用列表控件DropDownList来代替ListBox加文本框的情况,在这里对列表框的讨论,主要是为以后的应用学习一些简单的控件属性。) J9 M" W k% {# x7 w7 h
列表框的属性SelectionMode,选择方式主要是决定控件是否允许多项选择。当其值为ListSelectionMode.Single时,表明只允许用户从列表框中选择一个选项;当值为List.SelectionMode.Multi时,用户可以用Ctrl键或者是Shift键结合鼠标,从列表框中选择多个选项。
5 I- a% b# D5 z* T' t属性DataSource,说明数据的来源,可以为数组、列表、数据表。
) `' Q K; R$ w, [# v" ?方法DataBind,把来自数据源的数据载入列表框的items集合。
0 I+ M z7 `6 k* v例子:在这里我们将结合前面学习的按钮控件(Button)、复选控件(CheckBox)、单选控件(RadioButton)以及列表框(ListBox)给出一个实例。& G: C. p+ D1 I6 F$ |+ t2 x
首先,页面加载时,我们产生一个数组Values,并添加4个关于水果的测试数据到Valuse数组。然后列表框从数组取得数据加载进自己的items集合。然后根据复选控件chkBold的状态决定是否用黑体字输出列表框的选择结果。根据单选控件rbtnMulti和rbtnSingle的状态决定下一次列表框是否允许多选,最后按下按钮控件提交表单,显示选择的结果。9 h3 t9 ?! g) [4 \
1.源程序(FormListBox.aspx)7 q7 k' g0 L1 b
<!--源文件:form\ServerControl\formlistbox.aspx-->
+ A& j/ l% i6 P, W m/ Y% V3 }<html>) S) p0 _/ l6 s
<head>+ U' \+ m8 u, N$ z* m0 A
<title>
) ~/ `5 l9 d( M8 Z* G ListBox控件试验
5 F1 z4 f* G( d4 ]" r. x7 T* w8 C </title>
# j7 B" k w) U1 ?. I </head>, U0 B. ?7 E0 v8 J' S9 X
<script language="VB" runat=server>
+ y* C! I- D: s; t% |* j Sub Page_Load()+ c( C# C# f: |, j. L0 D7 y
'如果选中黑体复选控件,把文本标签的字体设为黑体
# @) z2 `# t" x If chkBold.Checked
1 p5 k- p9 l# K j7 d/ N- ~, q5 ] lblTxt.font.bold=True
- q6 o* k" T1 g( ^8 N Else
3 j' q0 X" `4 E' V0 K( }# L lblTxt.font.bold=False
- o) d5 j; t# u( M5 ^ End If
7 j% R5 s9 l A3 I" z( ~ '如果选中多选的单选控件,那么则把列表框设为允许多选
% I7 N3 u; h" V! j If rbtnMulti.Checked
. w" g' Y3 h8 g, D0 W4 d list1.SelectionMode=ListSelectionMode.Multiple% Z2 D7 X, I; |& Y9 k: K/ F% N( i$ @
Else5 Y4 G1 o" W0 ^; l9 G* Z
list1.SelectionMode=ListSelectionMode.Single
* R$ Q: d* [: `" `. d End If' p" s1 [5 {4 x; {
If Not IsPostBack
, A+ i. U' w$ ?7 I1 O '第一次请求时,为列表框设置数据
" ?7 k4 I/ I3 F; c( c' ^4 \ Dim values as ArrayList=new ArrayList()% h* Z) ?* E; L8 m& C! r+ ?$ k
5 n( V3 u6 d' `/ y& B" G values.add("苹果")2 q+ V# H, ]% f( K7 z, i
values.add("梨子")( K9 x I' H. Z" E* M$ n
values.add("香蕉")
1 k" P# L, ^7 ~6 M$ v# e: r values.add("西瓜")2 a+ K" q7 q) ?* `" c5 m" G X7 O( x
list1.datasource=values
0 `7 U9 x2 C$ a0 X, A' O" E list1.databind; r" o3 \* s/ p! h7 _7 X# F
Else
3 z0 ~9 U, F$ [; ], I8 a( @. X '把从列表框选中的内容赋予文本标识,如果未选择,显示"未选择"
' R1 Y7 @8 F( y- r+ m. U Dim i as int32. U1 L6 D) ?3 Q1 l
Dim tmpStr as String1 V% e0 V4 `0 V% Q+ i5 x" Y
‘对列表框list1的items集合轮询,根据其Selected属性,判断是否被选中0 L5 l5 D; H* [" l& M/ G
For i=0 to list1.items.count-1, c. ]- o( e0 f
If list1.items(i).selected
* f/ z1 r; o E* {6 f tmpStr=tmpStr & " " & list1.items(i).text% \. H% T- Y u: ^
End If
6 S2 p- ^2 `* b% z3 ]; _ Next
( [! q+ x+ k/ a; R. i If tmpStr is Nothing8 {8 s L5 z+ Y4 ^ K
tmpStr="未选择"% w: A5 ]+ ~8 Q+ f. `( z
End If F& L b6 A& D3 O
lblTxt.text="您选中的项为: " & tmpStr
' M' @. C5 T' M4 B3 t' t0 B End If C( A; }' N% O+ F8 ~
End Sub
+ P: _. [+ k/ m( ` </script>
, w& u# i6 L/ U, @0 _, O7 | <body >
! N+ y2 w& \# O <center>' d' x1 d+ o$ _3 t, e
<h2>ListBox控件试验</h2>" C4 R% W; o- l0 e6 Y3 Q. m
<hr>
# y9 {+ g- S" o2 a8 D" j6 W <form method="POST" runat=server>& A$ ` m6 |2 k- l7 d
请选择水果7 ?, r# D0 W& A# x: ~
<br>
O! D/ F1 ~' M3 ` <asp:ListBox id="list1" runat=server/>- q/ E9 u( a) M' v% L
<br>
. A( z* ]/ i7 V: t8 J& w: z7 B <asp:CheckBox id="chkBold" text="黑体" runat=server />
* I( x9 [0 Q" k- p4 i* k<br>& b. P* `8 X$ ?! m9 Q& Z
‘第一次设置为单项选择
5 u: d6 t+ K- m, T5 W: a( v <asp:RadioButton id="rbtnSingle" Checked=True text="单项选择"
+ s; V' y" @6 ngroupname="group1" runat=server />
/ _3 |1 |! {7 p) J7 A0 E) Y' k4 v; Y <asp:RadioButton id="rbtnMulti" text="多项选择" % b0 b' J" l3 L- Z8 g
groupname="group1" runat=server />
z: j) f/ d1 d<br>% _9 O* M, q% P9 b7 `2 w: a$ Q' w# t
<asp:button text="提交" runat=server />
4 _% g6 h) r! h& \0 i I <hr>. o$ o" U. T" X- H
<asp:label id="lblTxt" runat=server />
3 B+ R* |- B& t </form>
( l2 v3 d# o& {$ V& r$ H) u, M </center>
( _" l3 C# r9 J9 ]1 t+ U1 p </body>
5 c1 W1 R) ~& d2 M9 m0 v; f, k$ V</html>
- V) s( X: a3 b8 {3 r! c: l2.开始时的画面输出,第一次缺省设置为单项选择
, k% G3 I4 O; Z+ T( K4 Y' a4 ^. A% m# e% a: N( u
3.选择以黑体字输出,并且允许多项选择后的画面:# ~; k+ g& e6 U
6 T' V( @ T. h$ F9 X- a1 q9 F @' a5 q. r
2.2.7 RequiredFieldValidator* i$ \) m% g: C0 x$ o& i, a+ N
这个RequiredFieldValidator服务器控件保证用户不会跳过一个入口,如果用户输入的值跟符合RequiredFieldValidator的要求,这个值就是有效的;否则,不会跳过这一输入步骤而往下走。1 K& s' I2 |$ ~" ~7 ~; D7 c$ }- y
下面的例子(RequiredFieldValidator.aspx)验证了这个要求:
V8 o8 a$ u8 e1 s0 B, k; {9 C<!--源文件:form\ServerControl\requiredfieldvalidator.aspx-->
2 F" p2 ]) c5 h/ {0 u<html>
( t! j. e$ [& d9 _5 b" Y/ f<title>检验</title>
! ]0 o/ c3 ^& ~ O <h3><font face="Verdana">.NET->RequiredFieldValidator Example</font></h3>2 A0 v! c8 Q; J1 a% |- q, \
<form runat=server>/ I9 R. `; P% Z% c+ o: z. M
Name: <asp:TextBox id=Text1 runat="server"/>
; t9 O4 A. ^$ H0 v- {8 V5 a <asp:RequiredFieldValidator id="RequiredFieldValidator1" ControlToValidate="Text1" - h$ f" P9 h6 Z! q5 @
Font-Name="Arial" Font-Size="11" runat="server">
! s: ]/ }6 H; x: f, U6 ] Required field!
+ _) }9 S7 I7 L) n1 y9 F) S# u: e$ @5 H </asp:RequiredFieldValidator>
2 ^9 k9 _, @ C" \! `; D c5 i) P <p>6 m! C% O1 t7 M0 m, ]
<asp:Button id="Button1" runat="server" Text="验证" />
( M) a# L9 i2 N* N </form>. g) F, n/ @, ?2 Y! S
</body>
) v! p/ P; K6 C8 a9 b# R1 p</html>' ?* y Y3 q, o0 L) J% D+ Q% N+ D
运行效果如下:* m% ^( i0 Y2 r- L: t
2.2.8 ValidationSummary
& F& R( Z# o: ^用户的输入有时候是按照一定的顺序来的,有效性控件验证用户的输入并设置一个属性来线使用户的输入是否通过了验证。当所用得验证项都被处理之后,页面的IsValid属性就被设置,当有其中的一个验证没有通过时,整个页面将会不被通过验证。
5 \$ g6 O8 H: B" ~当页面的IsValid属性为false时,ValidationSummary属性将会表现出来。他获得页面上的每个确认控件并对每个错误提出修改信息。
' {$ M5 ?) ^. x- n+ o文件Summary.aspx的内容:
' T6 v4 J0 z# x- c' M<!--源文件:form\ServerControl\summary.aspx-->6 C$ }; @5 d. r j; y$ e2 d" N' l- |! o6 t
<%@ Page clienttarget=downlevel %>
; F7 e' E3 Z4 t: g& Y0 t<html>
$ B4 `2 t) }" D2 A. e7 y7 d+ ]<head>
: Y, {4 n! e6 w# Y- y <script language="VB" runat="server"> Y3 Y7 U# K% H. E
Sub ListFormat_SelectedIndexChanged(sender As Object, e As EventArgs)
5 j2 W+ u6 y3 v U* F ' Change display mode of the validator summary when a new option) A! K# S9 C( r5 M$ e
' is selected from the "ListFormat" dropdownlist
: F7 d- A) M, i: v E) ~1 @( O1 k valSum.DisplayMode = ListFormat.SelectedIndex/ _1 K+ Y* O9 V
6 H* b) \4 M/ h% ^; p End Sub
' c0 {! A1 b6 @& D+ z5 \ </script>3 m, [3 m) `9 ]! _ T5 u8 c9 s
</head>
! U5 j! u6 n0 L* r$ m; F; z<BODY>/ D2 j) w5 O* b' c4 W1 K
<h3><font face="Verdana">ValidationSummary Sample</font></h3>
& w7 W7 n" H1 J3 |4 h<p>. ^# @# [: `# n8 [
<form runat="server">
, z8 t: ]3 k' x9 ]( a6 x( P<table cellpadding=10>' r6 M& p+ v0 l# @: p
<tr>
, P0 N! M/ c/ o4 j) I$ Y <td>; t: @9 W5 C0 h {1 x$ z2 p
<table bgcolor="#eeeeee" cellpadding=10>) s6 a# j3 b& n6 l6 F% S. y
<tr>) c! q, n; r5 w
<td colspan=3>
! v9 ~6 S5 v) ?: X <font face=Verdana size=2><b>Credit Card Information</b></font>
7 G+ @& r; h6 j* k1 B2 h. ` </td>
, s! W- Z* i' M$ t, n; L </tr>" E8 \4 |( q( g; b9 K( |
<tr>& u6 @! P; F/ D2 l% `8 C
<td align=right>
1 `3 \' N! R* G- }: m% V( b3 z3 Q <font face=Verdana size=2>Card Type:</font> c1 }% X" F( i1 M
</td>0 \" W* \! r/ G F
<td>1 k/ S! ]! l( ]' G% _
<ASP:RadioButtonList id=RadioButtonList1 RepeatLayout="Flow"
$ ~! m4 h2 g/ X Arunat=server>
! m2 Y6 [" B) [/ ?- F <asp:ListItem>MasterCard</asp:ListItem>
6 K3 G6 Q: R% k# G* ` <asp:ListItem>Visa</asp:ListItem>
. |: o0 E/ X' J4 B5 J2 b </ASP:RadioButtonList>) X! K |5 I* d3 R0 g
</td>
( y7 K3 @9 p) S* Q( m( R' j) o/ k8 V <td align=middle rowspan=1>1 v# j- S0 ~6 }( I! {
<asp:RequiredFieldValidator id="RequiredFieldValidator1"
! i0 D4 f6 [' H ControlToValidate="RadioButtonList1" t4 |! M# t1 a. f
ErrorMessage="Card Type. "; w; b P4 x+ X. \1 |: u
Display="Static"' j) y$ X( K2 L/ a
InitialValue="" Width="100%" runat=server>
6 Q9 E7 U1 H% o/ I' ~1 T *
& z( w& C0 A: k4 P </asp:RequiredFieldValidator>
& R: Z4 N; b3 l. N) L$ O1 \/ L* ` </td>
3 u$ o# _! @2 J- b; C7 k </tr>
+ ]2 g; f9 Q4 k: u( J4 t <tr>
4 k1 x7 h0 R; f2 C8 d; A6 W <td align=right>
/ k* F3 t9 ~1 D, H <font face=Verdana size=2>Card Number:</font>8 ^* r; ]+ t* k1 b7 n1 `. x# x
</td>
7 C" u; R4 a3 D, K1 h, _1 K5 e <td>9 \8 I c6 l) v9 |! w: ?
<ASP:TextBox id=TextBox1 runat=server />
+ p' ? B% A, A# S; q3 _7 ] </td>/ G8 p5 G+ Z: {! z# F
<td>
# Z+ b& t" O7 t/ [( W6 ? <asp:RequiredFieldValidator id="RequiredFieldValidator2"
4 `( T) X2 _) k/ H' _0 S ControlToValidate="TextBox1"
& Y5 \/ Q+ i& n9 s0 L ErrorMessage="Card Number. "
4 C2 g* z/ m% m- U Display="Static"
3 F6 K) d6 v" W% g, Y: a8 y: ^* E% Z+ I Width="100%" runat=server>2 q' i U9 p& `. E4 _9 ?! J
*9 e' ^: G6 H! e) z$ ]
</asp:RequiredFieldValidator>
' x$ M1 G( }3 T( ^1 _7 C. ~) E( m </td>
1 F4 c1 v2 w, F. x </tr>( s _) N3 m* b9 r7 a& v. C
<tr>
; v& }+ y7 o% H! v) x" j <td align=right>7 ]+ x# b% ~! m! J% G8 H( _$ o+ y
<font face=Verdana size=2>Expiration Date:</font>
' Y! n/ k! Z6 s6 h% ]/ E </td>
/ K* s+ t8 Q+ i- S8 N/ H) _6 R" D <td>& c3 r% F' P( \
<ASP:DropDownList id=DropDownList1 runat=server>
* W& E9 v/ ~% x# S <asp:ListItem></asp:ListItem>4 J5 q1 e$ c5 T0 K$ \4 G
<asp:ListItem >06/00</asp:ListItem>
* o5 K! V% W# D- n <asp:ListItem >07/00</asp:ListItem>7 C U2 Q/ Z: T- \4 q
<asp:ListItem >08/00</asp:ListItem>
' r+ Z4 {2 V9 c7 U- m$ ]& i0 g <asp:ListItem >09/00</asp:ListItem>
' E. X" H+ H- B$ ^7 D' b% w* }7 q <asp:ListItem >10/00</asp:ListItem>
5 g+ N* z0 e0 `! X6 P <asp:ListItem >11/00</asp:ListItem>
& \) s5 V6 {" v. i8 F# w8 i <asp:ListItem >01/01</asp:ListItem>
* y3 J' |6 G: F0 F7 r$ ` <asp:ListItem >02/01</asp:ListItem>
" s3 N+ G6 R8 F <asp:ListItem >03/01</asp:ListItem>% T$ J, t3 d2 E+ L. [
<asp:ListItem >04/01</asp:ListItem>
) A6 R# }/ P% A' N; z <asp:ListItem >05/01</asp:ListItem>
" y- A: d& t% c1 I) z5 r3 f$ t, o <asp:ListItem >06/01</asp:ListItem>, {1 B, }, T: h# u
<asp:ListItem >07/01</asp:ListItem>
, t# M& |+ }: q8 e9 [) `5 M6 Q <asp:ListItem >08/01</asp:ListItem>
+ ~9 a& m+ K4 Z <asp:ListItem >09/01</asp:ListItem>
3 v; s# }! o1 n/ G5 K! S <asp:ListItem >10/01</asp:ListItem>
$ l1 }2 Z" m4 y0 t( l& n <asp:ListItem >11/01</asp:ListItem>0 @5 g5 y/ ^. Y
<asp:ListItem >12/01</asp:ListItem>" |0 @3 g" ?' `' S
</ASP:DropDownList>
; z( V7 D3 I! x5 c0 q4 W1 T) G </td>. q- ^% m& s! @+ b; F- S
<td>
3 f9 q% v" v3 q <asp:RequiredFieldValidator id="RequiredFieldValidator3"9 M" Y8 A1 J. f0 ^
ControlToValidate="DropDownList1" ; D9 n/ d2 N2 b) q$ \2 C7 z
ErrorMessage="Expiration Date. "
/ y2 V/ s! b- F i8 b4 U Display="Static"1 q& Q, e k/ s+ F- u p
InitialValue="" 4 d; J- U7 m+ {! c
Width="100%"
1 M7 a0 s+ ^" m/ M3 F5 X0 i runat=server>
6 V- `2 p4 X' g; D2 ^ *
3 ^+ C2 o7 W- ], ^3 ] </asp:RequiredFieldValidator>
% v E- z) r& O7 ~ </td>( o* j ]9 z5 J9 ]: _% \- G
<td>; \; f7 c' b( y; W, h& P. o, ?
</tr>2 g$ \: T/ D8 o1 O; Q$ T& C9 O
<tr>' I" ]$ u: i4 Q7 X
<td></td>
7 X& e( K* I6 X! S" ` <td>
8 V) I4 i) C1 m <ASP:Button id=Button1 text="有效性验证" runat=server />
: J% E; ], Q: B# [$ C </td>1 E/ d% g' a5 L. G5 m
<td></td>
( l; M; U, f0 d# D# a. d( ` </tr>
& c# y% j% H4 T) y </table>
+ k/ U, Z# @- { </td>
" F0 }6 M. g5 A$ G/ ]9 A <td valign=top>
4 z2 r: P3 r+ A# o7 I <table cellpadding=20><tr><td>
2 W# w' v5 {' w0 U' m5 o1 ] <asp:ValidationSummary ID="valSum" runat="server"
3 ^8 E0 [5 e; [* k; E r HeaderText="You must enter a value in the following fields:"4 n0 v0 N1 @( c3 { q% T6 `# |4 J
Font-Name="verdana"
9 U6 K/ U: ~6 V, Y! q) c# J0 V Font-Size="12" 6 ]' j7 V& n# C0 L* z6 w7 D7 b
/>+ D7 E$ U6 ~ U
</td></tr></table>
5 P- i1 l5 m/ u8 f </td>+ W7 c8 \( e' d& j: t; t
</tr>
% j9 Z- U* _4 E( {$ O. T9 K" c</table>% O8 v5 O0 u: Y! M9 T" ~
<font face="verdana" size="-1">Select the type of validation summary display you wish: </font>
# N1 B# ?+ m- E, A! y<asp:DropDownList id="ListFormat" AutoPostBack=true
- X# N5 }8 A5 H$ Y; z) S2 M2 iOnSelectedIndexChanged="ListFormat_SelectedIndexChanged" runat=server >7 H& ?9 D0 M1 }4 r. H" p" ~
<asp:ListItem>List</asp:ListItem>9 {2 k9 M" _& H9 N/ e
<asp:ListItem selected>Bulleted List</asp:ListItem>7 g3 w3 W, i# [) q' b: O$ f6 h3 N
<asp:ListItem>Single Paragraph</asp:ListItem>: q: P; v$ u3 R% L
</asp:DropDownList>
% I: z1 H$ N- |6 Q K! k# x</form>3 H7 h z( `0 u; ?5 p: D' t( `
</body># E4 `% V* Q1 @0 g
</html>
% W. P$ o. b/ L C结果如下: r/ y; d$ `7 }) q6 `/ p9 H1 Y
2.2.9 使用panel控件5 Z' s0 F3 C" }2 j( K0 A' \
我们在进行用户信息录入的时候,如果使用ASP程序写的话,通常需要三个网页:. Q) b* a, j: a+ ]* X: s
① 进行用户身份检查, E1 Y- s; X- O5 {
② 填写相关的内容
& |$ f$ a3 b, p3 j* L ③ 显示你填写的内容5 @* A& _# l; G5 d/ t r3 l/ a
填写的流程如下:
- t( |: z0 _! c8 Z# A) N
# }" x2 V' ~# n& _6 O8 j) o: y* |
这样的话,我们将分别设计3个网页。这样会显得很麻烦。可喜的是,我们可以使用asp.net
+ y2 ]8 o3 j& \* Z中的panel控件,在一个页面中即可实现上述的功能。
, r* b% |. ^! F6 Z: v流程如下:
+ A N. O6 r2 E2 R' Z/ H) k \* q% X9 S: N) K* @
% f8 j: k' x* j, f7 N- ?
; P/ E* d, T; \, W; T3 }' b/ y
9 J% _9 @3 W3 R8 g- i9 k
p# ]! o- [/ E$ b' F# s
0 p% a4 I$ H+ j1 ~" r) x% j& u" i9 i% e7 d9 A- u
& w; L, A0 C( Z- u1 c好了,有了上面的叙述,请看panel.aspx文件内容:$ a) m" z, \- l9 }, s
<!--源文件:form\ServerControl\panel.aspx-->. o- G3 R* l# T4 V6 \* d
<Html>
% h, W% N$ Q3 O# J <Body bgcolor="White">, A) S& I, J- Y* E0 p# ]1 O
<center><H3>使用Panel控件示例<Hr></H3></center>
7 M# @% q9 q ] S [* [; V<title>使用Panel控件示例</title>& T$ V) |0 f. O$ F
<script Language="VB" runat="server">$ |: e+ X& M$ B8 h
Sub Page_Load(sender As Object, e As EventArgs)
M. `8 d# @+ m+ J% R1 P2 v% o If Not Page.IsPostBack Then9 S2 o7 P% |+ _3 ?5 l; V3 T
panel2.Visible = False9 U) M! C, w" @
panel3.Visible = False k8 E3 A( a ]& O& K
End If
6 Z W4 N/ t' l" R2 k$ [ p" O+ K End Sub5 t3 k1 _9 m9 ^5 Z: E, |
Sub Button1_Click(sender As Object, e As EventArgs) ! B2 F) V' Z/ Y$ Q. u
panel1.Visible = False
8 b& \/ ^& ]" Z/ O panel2.Visible = True
8 G [1 F4 S. S C. f End Sub
" e/ C. Q& w9 W, A& d
/ n, E6 H6 ?0 o Sub Button2_Click(sender As Object, e As EventArgs) 8 _# F9 ~& |9 j
panel2.Visible = False
5 A2 A) D8 n" H8 c panel3.Visible = True
6 M+ {3 N* | l! \6 i; l1 _! t Span1.InnerHtml = "用户名: " & UserID.Text & "<BR>"4 j7 p% h5 r' Y+ {4 t% T
Span1.InnerHtml &= "密码: " & Password.Text & "<BR>"
& H8 |# ~. Z/ {; A: x Span1.InnerHtml &= "姓名: " & Name.Text & "<BR>"* Y1 |6 ^6 `) n. U; y( A1 L4 U
Span1.InnerHtml &= "电话: " & Tel.Text & "<BR>"- m% n" F0 F, n( t. B) v" f
Span1.InnerHtml &= "E-mail: " & mail.Text & "<BR>" G$ t: s, b) A( [' Y0 T, d' |
Span1.InnerHtml &= "地址: " & Addr.Text & "<P>"
- f6 U) T A: O- ?2 D! U & |" o0 B# P( R& I) ]
End Sub
) B. h& K5 I0 U Sub Button3_Click(sender As Object, e As EventArgs)
9 D+ e' T) B5 o7 {; i. n8 ` Span1.InnerHtml &= "输入完成!"1 E# I" L6 m% s3 S' j2 u U
Button3.Visible = False
- Z; }( t. Q1 X! g/ S' `, @ End Sub$ p6 h0 T( Y5 h6 o
</script>
8 Y$ P: @8 ? e6 e8 S<Form runat="server"> 7 ]8 ?* a& |4 Y- E
<center>
2 R: c9 [8 [8 Z9 l( E+ J; \. F1 Q<asp:Panel id="panel1" runat="server">$ A( i: }5 B8 ?1 C y- e5 a
<Font Color="#800000"><B>第一步:请输入用户名和密码</B></Font><Blockquote>
+ W2 }! W& {$ X* t! L4 B+ Z 用户名:<asp:TextBox id="UserID" runat="server" Text="kjwang"/><p>; V+ \. G5 J) |! g; h
密码:<asp:TextBox id="Password" TextMode="Password"
; q. W( o! T4 J. [* G8 l1 @* y8 ? Text="kj6688" runat="server"/><p>
9 R% }5 ~1 ?5 E! u! z <Input Type="Button" id="Button1" value=" 登录 "
' X% ~) p: `+ U- d$ I OnServerClick="Button1_Click" runat="server">
. u E6 A: W' y# U </Blockquote>
5 b3 [& a+ c2 F! o5 q: D$ k </asp:Panel>
2 B/ M! \: r% y- m7 O, Q <asp:Panel id="panel2" runat="server">
# c) v# R2 ]: V/ d <Font Color="#800000"><B>第二步:请输入用户信息</B></Font><Blockquote>
- ~+ k v8 W \/ T( f 姓名:<asp:TextBox id="Name" runat="server" Text="小李"/><p>
. t# F6 a/ P, g3 ^" `; ~0 l 电话:<asp:TextBox id="Tel" runat="server" Text="(023)65355678" /><p>
! l, ]* X+ W( W7 j! J E-mail:<asp:TextBox id="mail" runat="server" Text="jimmy.zh@263.net" /><p>% i2 B9 q( ^8 B4 U s5 Q
地址:<asp:TextBox id="Addr" runat="server" Text="重庆市人民路115#" Size="40" /><p>
. K# \- {% t: k5 H- x4 g2 [& t8 ^ <Input Type="Button" id="Button2" value="申请"
/ y6 ^; j8 |3 D1 L2 F OnServerClick="Button2_Click" runat="server">
# Y$ I) `. |2 U6 r2 [6 Q' G </Blockquote>
5 e. \; N4 G& y: H( b' m- l </asp:Panel>
5 f- W2 M0 J" `7 l4 G <asp:Panel id="panel3" runat="server">
! @# j2 [9 ~& L2 T; E, Q \ <Font Color="#800000"><B>第三步:请确认你的输入</B></Font><Blockquote>
) c+ B4 V$ p( _( O. n <Span id="Span1" runat="server"/>
8 a5 E1 E9 I" u; A. h1 z <Input Type="Button" id="Button3" value=" 确认 "
' X s" X/ A) l1 ~, B: m OnServerClick="Button3_Click" runat="server">
% K" z, ?: N2 v2 `; J* w+ Z( j </Blockquote>! Z5 q* b. f6 N; r( D
</asp:Panel>
& {0 t6 g1 e$ d, U, r o</center> $ q! M0 T; m4 E3 T
</form>/ N* W8 y) }& I* L
<Hr></body>, S( H8 y1 z" N+ u2 C' d" k2 V; a8 g
</html>/ \, a. l9 S" D# T- e
请看程序的运行效果:! }6 b( v& `! k2 E3 ^" t. }) a
a) Q9 o+ P3 O n5 i& p8 U5 f9 b# s$ N
# b. ^2 m/ M8 h: N& G5 d+ {& P6 C
第一步:4 D, z+ P6 L& v. o% S
- F: O0 A6 \2 U' Q9 r- f
第二步:1 k' U3 u* Y; G4 Q
" W3 U. T+ M6 n第三步:
v( r' O D, @* r( m2 \3 [9 W
8 D2 _" x* J1 r; T0 a8 U% ~1 U& s大家可以留意浏览器的地址栏,我们注意到地址都是相同的。我就是我们使用pann控件所得到的效果。
0 G0 u+ b9 ?5 C) O3 U2 ]2.2.10 选择控件/ W9 [0 Q) q2 C$ X2 I
选择的方式有两种:单选、多选。我们下面用具体的例子来说明这两种选择控件在asp.net& R: t6 |8 n4 R: h! {. [4 x
上的实现。
4 }1 O A" E: r' J4 W: R. k* R* p对单选控件,asp.net里面有一个专用的表示:RadioButtonList,我们看下面的代码:4 e; G/ ?, ^/ }3 S8 |! q
<!--列出选择内容-->- j( E; B4 D6 `
<ASP:RadioButtonList id=ccType Font-Name="Arial" RepeatLayout="Flow" " |! \" _5 V. U3 J; l, O
runat=server>
& a& g( w) L0 F+ Y& H) |3 Y<asp:ListItem>招行一卡通</asp:ListItem>
' a& k" z" G8 X) B( c <asp:ListItem>牡丹卡</asp:ListItem>
5 E" J& B* ^/ q! f0 ^</ASP:RadioButtonList>7 T# U$ N: B5 m
我们在取值的时候,就可以用一个语句:
2 \1 X2 { Z( j9 M) |, g; R8 ~* \Request.QueryString(“ccType”)
% e( ^- H1 ]2 C/ J" M; t来取得这个值。下面是我们这个说明的完整代码(RadioButtonList.aspx):# ?, R. Q7 v1 a) D
<!--源文件:form\ServerControl\RadioButtonList.aspx-->
1 _3 f5 Q/ T: T<html>
& L! c$ t$ C2 g. j8 A( M# F; W<body >$ j( r5 B6 |! e5 F3 U W
<center>: U! k) ]- t2 J- g7 M4 n
<br><br># t F3 m5 a5 [
<h3><font face="Verdana">.NET->选择控件!</font></h3>$ A& p. O [: u7 o
<br><br><br>. P1 B, f3 Q8 g" Q, \! M
</center>
9 A2 F6 R( k7 d/ k M <form method=post runat=server>
0 D7 x7 R( p8 S% }$ O <hr width=600 size=1 noshade>
" M( B7 Q5 f( K' \ <center>% Q( B1 r7 y8 M$ ^3 B
<asp:ValidationSummary ID="valSum" runat="server"
: [# |1 l3 U' Z$ q* |9 k z6 n& } HeaderText="你必须填写下面的内容:". P& A* J% h2 H9 i6 F: N
DisplayMode="SingleParagraph"
l0 n0 ?# A/ b& Q, R3 Y Font-Name="verdana" . S3 n: d' d; }0 [9 k
Font-Size="12" / l3 j/ J4 ]3 f$ G
/>9 ]2 _, p5 P0 t) s$ C: b
<p>2 \$ `1 s; X) x3 C
<!-- 信用卡信息 -->3 @* e; k6 J/ {( W+ K
<table border=0 width=600>
1 g! A, x' w1 _' E <tr>
3 w, }) y% s: l6 F, w% y <td colspan=3>: u/ }+ g5 `1 p" Q. D! z9 ~
<center>7 J, d5 E: ~# v* B# z
<font face=Arial size=2><b>信用卡信息</b></font>, F2 M3 J* z" u2 ^% }) j0 E
</center>: Y( U2 {1 w# D& m' D0 [
</td>1 w7 C1 J# i \8 ]
</tr> A" g9 {4 ]0 w Q
<tr>: ]* {! s7 m. E4 ^
<td align=right>
& l/ x( x% S. J$ G( ~1 M1 L: b <font face=Arial size=2>信用卡类型:</font>! @( ]6 a# k5 @* `/ R) ^
</td>
4 R3 m! y! N% Q$ N9 x <td>* y5 y1 Y1 B2 v3 {& a2 P
<!--列出选择内容-->: c, c& y* |# c4 n3 m
<ASP:RadioButtonList id=ccType Font-Name="Arial" RepeatLayout="Flow" runat=server>8 y6 C# D! w) @' y
<asp:ListItem>招行一卡通</asp:ListItem>! f' L- _. E$ o( l
<asp:ListItem>牡丹卡</asp:ListItem>
$ N. z9 ^4 |' g& \+ k5 } </ASP:RadioButtonList>
' T8 J. F% c, W* j% J0 I1 n2 P </td>- T3 w: k2 I3 \
<td>
8 i, k ]& G' A4 Y <asp:RequiredFieldValidator id="ccTypeReqVal"; W5 B# E7 i' @, E
ControlToValidate="ccType"
. g: ^6 K7 g- ]0 _6 n* L ErrorMessage="信用卡类型. ", `( i6 A6 S' g! h/ ]
Display="Static"" k, W2 a" B5 Z( v s
InitialValue=""
9 ^6 W3 p; k2 _5 G Font-Name="Verdana" Font-Size="12"
2 s9 J8 l3 I: k% ^ runat=server>4 P6 f; Z: F& ^, x8 b
*& r+ V1 Z( C; g/ _0 F9 v
</asp:RequiredFieldValidator>
* T/ O. [$ R' a, z, Z </td>) {7 j$ L7 U# X& R/ l$ e
</tr>
$ p- G2 F, |, L9 J </table>
( O6 P' X# j( T" C <p>/ l8 Y/ q' m3 I
<input runat="server" type=submit value="提交">
2 B; D! \; Y* ]+ @( X; o <p>% T2 l9 o0 G% U7 g4 f0 P( @
<hr width=600 size=1 noshade>, V1 e/ E' L9 s* b3 k( d
</form>, n% E8 s6 y! @! P R1 {
</center>
8 r m' O; L1 d: J2 U1 [</body>
# f5 W" p e3 \$ Y" R6 m# l</html>7 U; ?+ i; t5 s9 L
我们的运行效果如下:
% Y# G: j6 r, h& w! x3 m. z; z" x, A3 x3 A# C: q
T5 c2 B6 Y8 n9 [4 l4 t
4 f& f$ z4 l+ ^: e8 Z4 M
我们选择一个并提交,则会提交成功;反之,如果我们没有选择就提交,会出现如下的信息:
% u8 U5 V* r0 r6 n( M& s1 |! n9 B9 J5 R5 G5 o- l
我们再来看看多选的情况:
7 b5 [& p" U; l4 L/ ~3 v'选择项列表
4 K$ X1 o4 }7 D4 h$ H- L! l <asp:CheckBoxList id=Check1 runat="server">
. [6 { w+ ]1 \ <asp:ListItem>北京</asp:ListItem>
+ j* l/ @1 y4 r; K3 J2 X <asp:ListItem>深圳</asp:ListItem>
" y( l1 W1 C/ t' N2 x# S <asp:ListItem>上海</asp:ListItem>$ z4 F7 ~& s# ^! m( E+ ?
<asp:ListItem>广州</asp:ListItem>/ y* g/ Z+ Q' J( L% z* T( I$ g
<asp:ListItem>南宁</asp:ListItem>
" C# ?. @' o8 X* ^. S! C7 \ <asp:ListItem>重庆</asp:ListItem>! E0 Q: z7 Z: n! R5 _# S
</asp:CheckBoxList>2 \9 O- ]! c1 q- L U& F
跟我们上面的单选控件就相差在定义上,我们用CheckBoxList来描述我们的选择框,我们写一个方法来响应我们的“提交“事件:' v+ B |7 o o) T3 V% p) y7 `
'响应按钮事件* V7 f5 d9 L3 w: P3 y9 o; C# I
Sub Button1_Click(sender As Object, e As EventArgs)
2 O3 l3 n6 k4 \ Dim s As String = "被选择的选项是:<br>"
) A% S0 y, ?1 D Dim i As Int32
' |3 q( Z# j+ z$ X. k. J% O d For i = 0 to Check1.Items.Count-14 c# p. E2 z/ A; \2 x' G7 N' {
If Check1.Items(i).Selected Then + a7 W; j6 P+ i+ N+ d
'列出选择项5 a8 J: _9 c E) Q2 {0 p6 x
s = s & Check1.Items(i).Text
1 e* s u8 m Z2 Y0 L* w; X s = s & "<br>"
0 n0 c$ T2 J: F6 e2 j, n End If
: {. A+ e% D5 A/ g Next4 R/ d* n' o+ b2 o& Z2 `
'打印出选择项
. `- @0 s( _ a# ]+ d# L% s, y Label1.Text = s
$ c" d; Z. ~5 [$ M! g4 n( A( bEnd Sub
6 P- u; D+ a! {1 I& n这个方法为定义打印被选择的选项。具体的内容如下(list.aspx):
1 J0 f- E D% a6 X) x7 {! l0 t<!--源文件:form\ServerControl\list.aspx-->
6 g. p G% H7 I8 H4 K: u<html>
. {- s. v3 o9 o% [<head>
: g! Q7 M. N1 O3 ^: @$ R <script language="VB" runat="server">
, x7 j9 Q: S4 u. g4 i; X '响应按钮事件' m+ P- O, ]" n4 ^- `. D* N' p, o& u
Sub Button1_Click(sender As Object, e As EventArgs)
% j- t: o, N9 R+ N3 i+ ` Dim s As String = "被选择的选项是:<br>", L" T+ w8 h$ u# N' Z
Dim i As Int324 M9 P5 c1 L3 x4 m" N
For i = 0 to Check1.Items.Count-1+ L( Z7 I; \- L8 j
If Check1.Items(i).Selected Then
- S) t2 M# H8 P2 j8 w" i* K '列出选择项6 ]" h( d: E3 {: h1 X
s = s & Check1.Items(i).Text
5 V' @: `* i4 u( Z6 Q" W) b s = s & "<br>"
3 y4 Z6 {' f) w4 W6 ^ End If, g5 t7 ^9 D; E- w( t
Next
. R( W# ]$ k, a$ D4 _. \ '打印出选择项
! b$ P# O$ L9 b* {* }: @ Label1.Text = s2 z# I4 F/ H4 {: ^) }
End Sub
3 r4 T/ h1 P; e. }1 v3 ~ </script>% o0 k: z3 H0 |, N
</head>; Z% R8 M6 ~1 K* ?+ b
<body bgcolor="#ccccff">* v$ h( I- v6 ~7 ?7 Q% c! K+ S
<br><br><br>. t2 Z; i* J6 I
<center>
6 _$ [" ~0 I8 h8 _$ J- X <h3><font face="Verdana">.NET->CheckBoxList</font></h3>4 M* d/ O; {3 R
</center>9 Y0 s7 k$ u( g
<br><br>/ k7 z. ?) A3 x1 R( m( u
<center>* Y2 `5 ~" ^& m; Z
<form runat=server>
8 s' ]* `/ L" H9 k4 C3 @6 x7 G'选择象列表, A* Y2 u$ s+ y& t0 l
<asp:CheckBoxList id=Check1 runat="server">/ r2 a. H! k9 H, O
<asp:ListItem>北京</asp:ListItem>, \' c: ~0 P" G. Q
<asp:ListItem>深圳</asp:ListItem>- F( f; z2 X- f' u9 h
<asp:ListItem>上海</asp:ListItem>
; I& ?0 w$ F4 U1 P* {) H <asp:ListItem>广州</asp:ListItem>( S8 n* ~: q2 Q8 N5 @
<asp:ListItem>南宁</asp:ListItem>9 X$ L, g5 t% n% L
<asp:ListItem>重庆</asp:ListItem>8 J5 S+ R+ B3 I
</asp:CheckBoxList>3 ]) }: x) }. S
<p>
" V. S- D! k0 }1 y% u <asp:Button id=Button1 Text="提交" onclick="Button1_Click" runat="server"/>
5 N, U* F0 v0 a1 ] <p>
9 c! r8 q$ [6 I6 N* T <asp:Label id=Label1 font-name="Verdana" font-size="8pt" runat="server"/>3 O5 z2 w9 C: b& j0 E4 \' F
</form>
; _( m- o4 a. o2 O</center>6 G( F6 `6 f3 {2 J; T0 D
</body>6 C, ^7 m5 s7 h, v; ^
</html>2 Q1 p g( \4 {2 g
: z8 C; p8 X7 b
我们看到显示如下:" g u' O x* b3 X. R
; S6 {2 t' d- L. C' `8 l
选择几个选项,并点击“提交“按钮“,看到如下的情况:
6 |3 r1 p! I, n; A6 p' M4 @
- J+ j$ @; F; K( ~
2 Q9 {/ `) O& f: M$ x- @
' k. _$ L/ l# l/ M. I2.2.11 ImageButton 控件
1 X6 K% L/ O4 L4 j/ @3 {+ w" [ImageButton 控件% }- J* O" y% c2 K
当我们在浏览网页的时候,可能会发现这样一种情况:当鼠标移到图象按钮上和当鼠标移走的时候,将会发现同一按钮上将会显示不同的两个图片。我们可以用Image Button控件的 onmouseout 和 onmouseover 事件来实现。' n3 {1 r% {9 Z( N: J
请看Image.aspx中的代码:. Q$ u0 d$ b: g/ F1 i' }5 w ~5 W3 o
<!--源文件:form\ServerControl\image.aspx-->/ i! h) O7 f. b' k# D; a
<html>7 b: f4 C8 x, o/ G
<Body BgColor="White">
$ `9 Y0 }, ^7 _6 m" U1 M<center><H3>ImageButton 控件演示</H3></center>$ Q, _7 J8 J: D- S
<title>ImageButton 控件演示</title>8 i6 `/ O' I; ~% D8 A
<script Language="VB" runat="server">
. j7 L3 L! P" x) uSub Button1_Click(sender As Object, e As ImageClickEventArgs)
5 V) |* y( d' Q5 ?( n# q( d3 ~# v’定义当我们点击按钮的时候,将访问的网页
' _; p- H) n3 ^5 O- k# G2 c/ }Page.Navigate( "http://www.yesky.com" )) a6 m; [. D0 u/ n7 A7 @% x% z
End Sub- L* j/ z7 x( c8 Q/ R
</script>: k t ^* K& O3 J+ ^& w
<Form runat="server">
: {8 H5 B$ B3 a1 q<center>0 D* A( I0 e& I$ b
<asp:ImageButton OnClick="Button1_Click"
1 i& D" ? Q* b5 aImageUrl="18.gif" id="Button1" runat="server"
: U; S r7 j, T8 mOnMouseOut="this.src='18.gif';", i6 J8 j( P: t* K& j R# h( L
OnMouseOver="this.src='19.gif';" />$ |6 G; x( ?3 t% Z1 M
</center>
9 O. q0 E0 F( o" S</Form>/ T% g5 n; M* w6 a' X
<asp:Label id="Label1" runat="server"/>
0 n+ ^& L0 {# @* ~" n) W/ C</Body>- m8 P; e% z5 p% ^5 `* n$ J! t
</Html>- f$ A9 e9 s) U7 r
在这段程序中,我们使用了onmouseout和onmouseover事件。
% L5 E6 b ]* z" B& A6 o3 \+ U请看程序的演示效果:
, X6 W: N* @2 f当鼠标移动到按钮上的时候,将显示:$ d' X" ]5 }* y8 f, ^# T
( ?/ a4 [- n# Z& y) y+ _! R+ O/ J _$ Z6 C; V+ K5 ^
2.2.12 列表控件
9 Q# ~, ?% \: e6 g- l在asp.net中,有几种方法可以应用于列表控件。我们可以在aspx代码中直接嵌入相关. u' i% ^0 D3 H S" o
的代码,也可以在页面装入的时候加载这些列表信息。; h3 R4 @ t2 `% _0 w v3 I- I# Y
下面是具体的应用,我们先看看在aspx中的列表方法:. Q& k" X @( z2 P3 ~2 i
<!--列表->列出内容-->
: @. I( g. |3 l. O5 I7 F <asp:DropDownList id=DropDown1 runat="server">
. w e2 }2 v, u7 g/ k& B$ }6 L$ s& M <asp:ListItem>北京</asp:ListItem>, s7 S! g6 Y# [9 ~# y2 C; ]
<asp:ListItem>深圳</asp:ListItem>, c4 B8 v1 {' ?+ e9 ~
<asp:ListItem>上海</asp:ListItem>
0 [6 I& ^- A- `) B5 p/ k# j) H: J6 z4 E <asp:ListItem>广州</asp:ListItem>
0 Z; R" a/ c$ Y Y <asp:ListItem>南宁</asp:ListItem>% x7 i7 w$ c. I
<asp:ListItem>重庆</asp:ListItem>4 }- J }$ T- ?
</asp:DropDownList>
0 `4 B, G/ \. w+ k8 ` p我们在需要取出所选的数据时,直接去取id值,即DropDown1;我们再定一一个方法,响应“提交“按钮的事件,就可以了。下面是完整的代码(DropDown.aspx):
' j. c% k# X7 w4 Q) `/ {<!--源文件:form\ServerControl\dropdown.aspx--># n# }7 Z; {; q$ J7 Z V
<html>- `2 S }% n# |& l
<head>
0 D) X" b+ b6 a+ v& t
~7 u' i- Z0 C8 w <script language="VB" runat="server">
8 I, Y3 W2 z6 L* @
( p" |+ X$ l1 k2 n+ K3 i'在点击按钮时候响应
! G3 N8 n& N& @ Sub list_Click(sender As Object, e As EventArgs)! B' `( b7 B: V
Label1.Text="你的选择是: " + DropDown1.SelectedItem.Text
# W/ L; x; f* T/ d. O End Sub$ C# Y! _5 F+ J# F
</script>5 w9 L& d$ `+ J1 u1 [% J9 F+ l! U# I+ \
</head>
p* e5 K: R0 r! r<body bgcolor="#ccccff">( I$ J7 v+ r, x" x. x S
<br><br><br>) {" U* } Q7 @" o9 P5 @) |
<center>
7 S( u0 K% Y- H' V- { <h3><font face="Verdana">.NET->列表控件</font></h3>' N3 d6 s) l/ M. g( H
</center>) v- J3 M9 W2 J0 z
<br><br>' E# t" w! M* R$ n" L
<center>
& H: J3 P I, ~ r <form runat=server>( k, X: h# Z+ O# ?* H* M
<!--列表->列出内容-->$ t9 G- p3 ]+ O" y! W
<asp:DropDownList id=DropDown1 runat="server">+ h5 t/ `1 W& |- q
<asp:ListItem>北京</asp:ListItem>0 ~$ ], r6 N0 e& w. a
<asp:ListItem>深圳</asp:ListItem>% i/ E* }( a( L6 g1 Q
<asp:ListItem>上海</asp:ListItem>9 q m& @% \0 K. l
<asp:ListItem>广州</asp:ListItem>
G# V4 y( F W9 m <asp:ListItem>南宁</asp:ListItem>! P6 w$ X( D8 ], z/ A
<asp:ListItem>重庆</asp:ListItem>8 D! p2 f8 K. P; P
</asp:DropDownList>
; ^1 |; O3 l N1 V- E/ R1 o <asp:button text="提交" OnClick="list_Click" runat=server/>, h* ?! ]6 d7 k9 }. F7 o
<p>. p5 u& I6 C( \& [
! @% E/ ~( w9 z* q1 y5 L6 V, D <asp:Label id=Label1 font-name="Verdana" font-size="10pt" runat="server">
$ Q3 t; Z" g# F: _ n4 M . f9 p* F: D4 G: N7 t9 h
</asp:Label>
( y# ?7 s2 U# b5 j2 @4 s% i </form>7 L' v# _" m! ~1 X! T' v
</center>, p: T( u+ [$ v
</body>
6 s. J0 C! _6 p4 z7 |1 d! G1 E</html>
+ g# k4 L) ?- J7 I" ^我们看看运行效果:" U9 S; D8 M/ F Y: q7 L: w( m. U
# R4 N9 j8 ^9 \3 L. b! z1 `, ~& G- M7 B
点击提交按钮时候看到下面的效果:
; k$ d! F# ~* Q# t7 N0 \/ c- l0 @" D' i7 r6 h+ V
0 t. Q3 x ~- t( a1 s- m9 m下面我们再来看看另外一个列表控件的使用,我们定义一个在页面装载的时候调用的方法:
' O# h& l) v+ u) [- u" o7 p'再页面装载的时候调用的方法:/ F- c5 _' G, e$ e' V
Sub Page_Load(sender As Object, e As EventArgs)
+ S) u: l% ^/ \5 C- N5 K If Not IsPostBack Then- ]: ^5 I8 n% g' _9 |$ ~
Dim values as ArrayList= new ArrayList()
& g8 ?' u$ v& p4 B# ^2 }+ G values.Add ("北京")5 D) i) y" j* `0 }( J2 B
values.Add ("深圳")
& H7 E( n/ v% _8 ~, t values.Add ("上海")4 l, ^ d4 r8 z8 Y, \0 _2 z b' I
values.Add ("广州")
; o2 q; G: ]& |; S" f/ ?& v5 P. _ values.Add ("南宁")
! o7 L3 ?% b+ Z; @, v" `) I) i9 c values.Add ("重庆") `+ `* B) ^6 B! V( l F% S
'设定DropDown1的数据源为values,即上面定义的信息
# B# E9 [" `4 }! M# O9 ^- a2 t; e, X, D DropDown1.DataSource = values7 Q5 s- S% @8 C
'数据的绑定
' D/ J0 g( c3 ]% _2 { DropDown1.DataBind& v5 `' u0 D- j. N
End If
; _8 M E+ B1 E; I7 G1 h End Sub0 i9 u! a h* U5 c5 n+ @' c* _; ~) V Y
我们在aspx代码中调用它:8 W7 v! ]4 y! J
<!--列出列表信息-->
0 ?) R" R& F& _, u<asp:DropDownList id="DropDown1" runat="server" /> e# O- q6 ?6 s2 e( S/ K/ t) u
就这样的一个简单的语句就可以了,下面是这个文件的完整的代码:
8 R; [3 J2 d7 n; x9 K+ l<html>
2 _. o$ f! ~0 N# V, t1 T* q<head>
* [5 ?+ M3 [* F R9 k <script language="VB" runat="server">( C9 `- N! }/ c& z
'再页面装载的时候调用的方法:
& N# I) V# J: f" I: |% @ Sub Page_Load(sender As Object, e As EventArgs) ) Z. p: U0 z ~- K! x1 N$ h
If Not IsPostBack Then: K* ?6 r; W" a9 ~
Dim values as ArrayList= new ArrayList()
4 g: W0 q( g8 O. x/ k values.Add ("北京")- ]* m3 K' U7 w) j( [% Q
values.Add ("深圳")* N' S# p3 z; `/ {- z) C7 d' J( x
values.Add ("上海")
- _' g; v0 x! \* O: g values.Add ("广州")
! _/ d. B/ n e0 Z2 \" q values.Add ("南宁"); ^6 g' m3 ?2 }% |: X
values.Add ("重庆")2 V( A' u. R P$ Z c9 h7 r0 i
'设定DropDown1的数据源为values,即上面定义的信息
+ }2 k# o& M8 O1 \ DropDown1.DataSource = values
# X! p3 u2 ~, `7 G; ]1 s+ X3 Y( E; l. e '数据的绑定7 r1 B( h0 S6 i K
DropDown1.DataBind& @; O+ A5 N* E5 f4 @, a/ b
End If
1 U- I: d7 H' C End Sub# i% m$ D$ | h) [" n' c
'提交按钮响应的方法
; h8 U/ C' p1 D, X- H Sub select02_Click(sender As Object, e As EventArgs)3 y9 h; `3 o" t2 M* y1 K# s
Label1.Text = "你的选择是: " + DropDown1.SelectedItem.Text
( Q* {9 M, t$ F& Z1 B End Sub
7 K2 c" g0 |- r0 d; | Z! z- X% k </script>
9 P! r1 \( B* |</head>5 q2 z X7 `/ x3 E
<body BGCOLOR="#CCCCFF">
0 T R' j4 V' p2 C3 j! k6 [0 @; d<br><br><br>
6 v0 V: y2 _) l1 j! r j& d3 a' ~* g<center>
. |% F U0 T- R( ?& Z <h3><font face="Verdana">.NET->列表控件</font></h3>
! k: P8 `8 `$ Z+ g* n' v</center>
( a0 V1 @/ _# q8 ?+ c$ P<br><br>% k+ e# @5 U( J1 E( C
<center>
% |0 L- K: Q1 |: Q; N$ K <form runat=server>
% }3 B6 Q4 b# y) N. {8 M8 p<!--列出列表信息--> 8 s4 _# ?& J: S/ B/ j
<asp:DropDownList id="DropDown1" runat="server" />
' s5 H' X7 c( a) _4 U <asp:button Text="提交" OnClick="select02_Click" runat=server/>
# f: B; |+ [" G. \7 O <p>
* {* T4 E! E( l$ d: j$ N <asp:Label id=Label1 font-name="Verdana" font-size="10pt" runat="server" />
?( U j' h; B* i+ A </form>: H" Z) u, P3 o
</center>. r, q! X; m9 w m' W2 i
</body>
: U ?9 C; ?0 ^8 M</html>
4 | r1 N+ B, q% O& l运行的结果跟上面的一样。9 T6 G$ R" r5 Y* j# `" g
2.2.13 重复列表Repeator; O2 s, Q; I5 b2 `* l" u
这种服务器控件会以给定的形式重复显示数据项目,故称之为重复列表。使用重复列表有两个要素,即数据的来源和数据的表现形式。数据来源的指定由控件的DataSource属性决定,并调用方法DataBind绑定到控件上。这里需要说明的是数据取出以后如何表现的问题,即如何布局。重复列表的数据布局是由给定的模板来决定的,由于重复列表没有缺省的模板,所以使用重复列表时至少要定义一个最基本的模板“ItemTemplate”。
0 i5 U$ V# N' o- y重复列表支持以下模板标识,所谓模板就是预先定义的一种表现形式,以后我们还会就这个问题专门讨论,这里就不在多说。
0 {* L9 o7 `; F* r4 W8 U) a& t9 |- p1)ItemTemplate模板,数据项模板,必需的,它定义了数据项极其表现形式。
4 i* {' }& @) b/ i+ T9 ^: C2)AlternatingItemTemplate模板,数据项交替模板,为了使相邻的数据项能够有所区别,可以定义交替模板,它使得相邻的数据项看起来明显不同,缺省情况下,它和ItemTemplate模板定义一致,即缺省下相邻数据项无表示区分。
: [0 c) q) T! w F9 M) j, t1 V; y3)SeparatorTemplate模板,分割符模板,定义数据项之间的分割符。
% x+ X; C: J/ x' S5 t/ a4)HeaderTemplate模板,报头定义模板,定义重复列表的表头表现形式。
% h' V! i9 \0 k5)FooterTemplate模板,表尾定义模板,定义重复列表的列表尾部的表现形式。! Z* j, R% O4 p
切记,由于缺乏内置的预定义模板和风格,在使用重复列表时,请一定记住要使用HTML格式定义自己的模板。2 [, v) U6 Y2 p
下面给出一个例子,看它是如何使用重复列表控件的。下面的例子首先在页面加载过程时把数据装载,并绑定到两个重复列表上;然后以一个2列的表格显示;最后把所有数据显示到一行上面,并且国家和领导人之间以3个中横线分隔,每一国家之间以竖划线分隔。
& F7 E: w/ i E% w* V1.源代码(FormRepeater.aspx); a4 ?/ K# b* i1 D# R6 q
<!--源文件:form\ServerControl\FormRepeater.aspx-->
* V3 y# C# H# Y* b<html>
; S0 H3 j4 v' d7 x* e- { <head>6 B' ]3 x3 D' K8 q* [) @' ?3 G
<script language="vb" runat=server>3 \# ?$ O' u" T
! R7 j) ?4 L- B% g3 i2 i6 _% C9 m
Class Leader9 z$ K0 f: }9 T
'定义一个类Leader
) x. g" v; U8 u. V# x dim strCountry as String @( h. y% h7 a& @! G0 B
dim strName as String
: B/ H9 A5 U8 m; g2 t% G- a Public Sub New(country As String, name As String)
1 R1 L& Z- x' U" \. } MyBase.New( T4 f- _: n1 K! P/ w2 c( t
strName = name4 z$ @$ Y: [; ]0 d, V$ c M M
strCountry= country
$ A9 \$ z3 [9 R' c1 ^1 z* i+ R6 b* c End Sub
% `% W6 s1 E$ P2 f ReadOnly Property Name As String
) ` j1 r( _$ T1 e# X& p% g Get # e+ k* l( y! _
Return strName) F& |( e, [7 W/ I
End Get
1 |; ]. l+ K s" H" H2 G Y End Property
* k" [6 M" T( x8 Z7 y
; U; Y- g( T0 d, @ ReadOnly Property Country As String4 {5 y R `. m8 L
Get
+ b/ \" _$ p& P Return strCountry
0 e; B8 ? X3 [4 P9 K" V" R6 a End Get
- v& Z% b1 W6 L! y* [) J5 X: _9 ` End Property) ]3 E- t( H' `
5 T5 _6 X8 v% i# G+ u* V
End Class
s6 r; {& X# D3 A0 S* y - [8 E. B0 T6 M+ f# \9 ]
sub Page_Load(s as object,e as eventargs)# ~4 f% {% r/ A7 t! S
dim leaders as ArrayList = New ArrayList()
% ~, j8 {# `+ v/ O/ W Z if Not Page.IsPostBack
+ h7 Z" F4 P6 u '加载数据
0 K- Q6 p" S: O8 I- b5 b; E c leaders.add(new leader("美利坚","布 什"))+ A* }+ h0 y! h$ Q+ e* r& P& l# g
leaders.add(new leader("俄罗斯","普 京"))+ Y' R$ P1 y9 `
leaders.add(new leader("中 国","江泽民"))0 Z3 B/ G/ x. s- f
5 E1 [1 u, c9 k' @3 X4 o5 i( c
Repeater1.DataSource=leaders
" I1 X3 w5 @, c/ T4 x' p8 o8 ` Repeater2.DataSource=leaders
+ l7 M9 y7 M5 M; u7 Y# d Repeater1.DataBind
; ]) R# }3 j6 O% `# O Repeater2.DataBind
5 \: S w1 J% z+ f end if6 D/ \( s$ G6 o* b4 G3 e
end sub
* N. N9 `6 u3 @9 D% k0 |1 o </script>
8 L: Y& R) x9 q7 R" c( s <title>, v/ q& r) l- K/ E
重复列表使用例子9 u; A: E' o$ U7 j# e1 A' n
</title>3 k+ M" a" I4 P5 x, m" P5 p, m
</head>7 G0 o& n9 A; Y7 g/ H8 P W
) ]2 O( N& X, O' E <center>
1 N* Z% h" c: @, [' f* e, X <h2>重复列表的使用</h2>+ c7 a6 T% L0 \
<hr>% X7 C6 V- z8 n. h7 I
<br>
6 ]7 L1 n% |- Q, w/ v '以表格形式显示国家,领导人信息5 m( n @9 @& ^
<asp:Repeater id="Repeater1" runat=server>. w* u* `8 K9 U5 _# B4 s$ f4 p9 S
'定义表头
8 X0 r4 B! \ \! M, b' m5 M<template name=HeaderTemplate>
) r0 T- Z; E% b& J, s6 u+ C2 Q: } <table border=2>
0 W0 P* |* k, w* E% e- [' n( d! v+ O <tr>
2 w; W: ]% K! j; p+ {$ I! I <th>/ f5 H2 L( O' y/ t) D4 T b/ [0 B* M
国家名
3 O L6 z) B' A, @+ o9 X- U% O </th>3 M* T$ J) Q7 R( \2 Q
<th>
6 c% ^& g: l. f/ { 领导人
; e% A" Z( q3 U* c @ </th>
% u" H4 U9 L5 X+ Y# Z </tr>& E- p ?6 F3 c
</template>% u, e3 ^- S& c% v7 g6 }$ e) R
u2 X' y- f& V3 Q! L' F '定义数据显示格式$ X6 Y- K3 q( ?: l$ ^ {
<template name=ItemTemplate>
1 c# k- G7 Q- Y% N1 s <tr> `' k' n0 }/ |2 t
<td>% v8 F& r" j# ?' e
<%# DataBinder.Eval(Container.DataItem,"Country") %>
1 q$ ?7 k1 i0 b) B) s9 y$ E: w </td>! D' J6 L; N1 ~& w" H. U; c( d
<td>
2 z3 F- z. o% C {0 |$ _. l4 b# _/ q- Z <%# DataBinder.Eval(Container.DataItem,"Name") %>
1 K$ {) D, o: w5 A1 W5 a </td>5 P1 o/ B2 [8 t) g: @
</tr>0 C+ O/ b! i- u# l8 v9 d i& ]
</template>
% }; c4 i C9 |3 _
: N1 r, v4 h4 a/ l5 T '定义表尾
' e( Y7 }1 v, G+ W5 `, y8 _& T <template name=FooterTemplate>
0 N5 n* L) p" q( e <tr>
1 n5 [0 g3 ?) |; i9 m6 p4 O) H3 \ <td>日期</td>
5 H X* S. {, J1 s M, C! x <td>2001年</td>
. U. X3 k$ D4 Y/ @0 ]8 E </tr>& P- Z: f# \% v- C8 ]/ |1 j) Z1 U
</table>: o$ i m' N8 x* M
</template>+ _: `/ e3 @& @7 k) l8 R5 y! r
</asp:Repeater>
" Y/ u# a2 F) k1 j/ S. O# N <br>$ W/ Q' f: d- c, a- t$ r! T
<asp:Repeater id=Repeater2 runat=server>
- m; Y3 C- H4 L8 ?% F, t '国家和领导人以|分割显示
3 Z$ |, X: G8 h# d <template name=ItemTemplate>' [" M! x- I* B% L
<%# DataBinder.Eval(Container.DataItem,"Country") %>3 c; N/ d0 G2 r
---
$ J! Y$ b; T$ W <%# DataBinder.Eval(Container.DataItem,"Name") %>; J a, u# ?& h+ m8 J
</template># C* q' _5 f4 B8 D' ~7 k ?
<template name=SeparatorTemplate> ]1 L3 y! O' V" p2 P8 x' i3 F' o4 r
|
0 ^4 N" v5 b& e/ `5 Z </template>
4 S% E, X6 F, q/ t </asp:Repeater>
1 x L/ f$ Z2 d3 P7 P' m9 F- ? </center>
8 M9 D2 O# |5 U" ?( w </body>) \. | F6 I' X8 Y0 c" F3 |
<html>
) T7 K# j# G C# Z+ j- T1 q; R# T2.输出结果* U7 o1 i# k% U8 J
( n4 R6 b }; s M6 Y8 k2.2.14 数据列表 DataList
- _! ^8 F7 f% j( y数据列表显示跟重复列表(Repeator)比较类似,但是它可以选择和修改数据项的内容。数据列表的数据显示和布局也如同重复列表都是通过“模板”来控制的。同样的,模板至少要定义一个“数据项模板”(ItemTemplate)来指定显示布局。数据列表支持的模板类型更多,它们如下:2 ?+ m4 Y5 F H# i$ F9 o
1)ItemTemplate模板,数据项模板,必需的,它定义了数据项极其表现形式。8 [; n' i. P& q& p
2)AlternatingItemTemplate模板,,数据项交替模板,为了使相邻的数据项能够有所区别,可以定义交替模板,它使得相邻的数据项看起来明显不同,缺省情况下,它和ItemTemplate模板定义一致,即缺省下相邻数据项无表示区分。
( [' ? @4 m5 O& ]% N3)SeparatorTemplate模板,分割符模板,定义数据项之间的分割符。/ m) l9 X# [2 q9 G" P
4)SelectedItemTemplate模板,选中项模板,定义被选择的数据项的表现内容与布局形式,当未定义”SelectedItemTemplate”模板时,选中项的表现内容与形式无特殊化,由ItemTemplate模板定义所决定。. Z: u) C" G1 y+ X
5)EditItemTemplate模板,修改选项模板,定义即将被修改的数据项的显示内容与布局形式,缺省情况下,修改选项模板就是数据项模板(ItemTemplate)的定义。( Z0 A# ?2 e5 V) g3 i
6)HeaderTemplate模板,报头定义模板,定义重复列表的表头表现形式。
' f% m& }' Q8 R$ }: S k6 D7)FooterTemplate模板,表尾定义模板,定义重复列表的列表尾部的表现形式。- z; }7 B U" a0 c1 ~2 v' G
数据列表还可以通过风格形式来定义模板的字体、颜色、边框。每一种模板都有它自己的风格属性。例如,可以通过设置修改选项模板的风格属性来指定它的风格。, P8 c {7 T- M9 V
此外,还有一些其他属性可以导致数据列表的显示有较大的改变,下面择重说明。4 U; f8 f9 i+ I! i) m
RepeatLayout:显示布局格式,指定是否以表格形式显示内容。
+ G [% ]0 k0 ~: d& l- C, Q7 p8 |RepeatLayout.Table指定布局以表格形式显示。9 X& S4 H% a8 `4 W
RepeatLayout.Flow指定布局以流格式显示,即不加边框。, z' f+ y3 E1 U; V
RepeatDirection:显示方向,指定显示是横向显示还是纵向显示
* O7 f. U7 Y# C9 D3 b" d RepeatDirection.Horizontal指定是横向显示; q" e0 l9 T9 `* f/ G1 R
RepeatDirection.Vertical指定是纵向显示
0 v7 R+ L' E1 p& k1 t$ HRepeatColumns:一行显示列数,指定一行可以显示的列数,缺省情况下,系统设置为一行显示一列。这里需要注意的是,当显示方向不同时,虽然一行显示的列数不变,但显示的布局和显示内容的排列次序却有可能大不相同。; W& S$ q* J8 m" Q% y& J
例如:有10个数据需要显示,RepeatColumns设定为4,即一行显示4列时% a* Q; q3 b2 f( t5 h; k8 `/ _
当RepeatDirection=RepeatDirection.Horizontal横向显示时,显示布局如下:
/ P. v; s0 m2 q8 Z6 x0 _Item1Item2Item3Item4: ~; T: N$ v) y- m f4 f2 r. @
Item5Item6Item7Item8
) _) s% u: y& U$ @" WItem9Item10: p" b. Q! `, D4 ]
当RepeatDirection=RepeatDirection.Vertical纵向显示时,显示布局如下:, O K N3 J$ i! ?
Item1Item4Item7Item10
# a: D# n& z' hItem2Item5Item8
+ C3 ?4 n( K/ j: U/ P Item3Item6Item9# R/ U2 R; f* G6 @; t9 P# m
BorderWidth:当RepeatLayout=RepeatLayout.Table即以表格形式显示时,边框的线宽度$ m C: M! t8 w! c( l) ?8 L
Unit.Pixel(x) x>=0,当x为0时无边框
! ^; S! K8 o6 {8 h6 E/ XGridLines: 当RepeatLayout=RepeatLayout.Table以表格形式显示时,在表格当中是否有网隔线分离表格各单元。, U. l! k# d+ J9 O' A6 @
GridLines=GridLines.Both,有横向和纵向两个方向的分割线。
# R7 e3 |2 N v9 HGirdLines=GridLines.None,无论横向还是纵向均无分割线。
( i( w. J: z8 y' Z( T例子:演示以上介绍的各属性的设置对数据列表输出的影响,并且当数据项被选中时,数据项以粉红色来反显。
' k3 u3 `5 d4 _/ ~+ n5 |' D" N) Y1.源程序(DataList.aspx)
* M& k6 N) ^1 E& o/ ]& O; R$ }<!--源文件:form\ServerControl\dataList.aspx-->
4 @5 m' k# t. v3 e, ~1 c- F<%@ Import Namespace="System.Data" %>
! n7 G# ]6 E# y<html>
( w$ k2 X! ~4 v1 l, @& v( l' W% ]2 M<script language="VB" runat="server">; `+ G8 ]# L) I1 p) ]" u+ k
'创建初始化表和载入实验数据
* x' }5 Z7 C; ^5 X9 G( s" j Function LoadData() As ICollection
: Y; K4 _" O* K Dim dt As DataTable
) q* ^7 K" @6 L4 ? Dim dr As DataRow
& {5 v, ^, d7 b1 ^' J6 \ Dim i As Integer9 [2 s q6 l* q+ N1 C3 \2 p" G2 C2 c
'创建数据表
; e2 }% `3 I: L2 z* @# ?) s dt = New DataTable ?2 X' V. l' b M* D
'建立数据项结构
* t% ^! P" s$ M- N3 q" g dt.Columns.Add(New DataColumn("Content", GetType(String)))5 ` }& y' ^0 Y7 p
'载入10个实验数据
+ |6 k" K4 M& j% V8 i For i = 1 To 10
" p% k) c2 F) R dr = dt.NewRow()% H# y& a& h9 M. H
dr(0) = "Info " & i.ToString()2 T3 W6 m8 T4 b- k
dt.Rows.Add(dr)' Q0 @+ i8 G; R' L3 D
Next: ~6 Z2 ~( f' i- l% E
'为数据表建立一个数据视图,并将其返回
8 j( a4 V9 H, t. q* C- h1 Q LoadData = New DataView(dt); i A. t6 q7 o$ Y! @* H6 n; t( U0 ~
End Function
2 L+ O. x- D% J% P# W7 H Sub Page_Load(s As Object, e As EventArgs)
4 G$ B2 j; f0 A, i# k; m | If Not IsPostBack Then
+ {0 f5 V: p C! c* @* v DataList1.DataSource = LoadData()2 B( ]5 w+ m' j( _+ Z5 o$ ?
DataList1.DataBind2 ]* D5 h7 }) v! A) y
End If& E ^ |7 X! q7 S5 T
End Sub
3 @! x0 p8 f' b5 Y Sub DataList1_ItemCommand(s As Object, e As DataListCommandEventArgs)4 ?: j. C4 H2 B3 q
Dim cmd As String = e.CommandSource.CommandName
W$ Y4 y- O& S* K# H& o# ]0 } If cmd = "select" Then
1 q, ?* W& z3 `* k DataList1.SelectedIndex = e.Item.ItemIndex
* D' w) W; g+ C0 _! ?4 T" n' c End If
/ Y. ^. X; J, r+ L1 r( i% | % S& M8 D: b: v
DataList1.DataSource = LoadData(). G% N* o" S) b% B
DataList1.DataBind / a$ A0 ]0 C2 K8 X
End Sub
/ z& Q, X/ u% R4 i" E'当刷新按钮按下后,对数据列表属性重新设置1 J- o/ b+ T6 L
Sub RefreshBtn_Click(s As Object, e As EventArgs)
9 H; ~) t5 M' H& O% A/ z If lstDirection.SelectedIndex = 09 Y9 h' o) e5 f; T2 h
DataList1.RepeatDirection = RepeatDirection.Horizontal
! x z2 c; }% [; n0 o Else. E" M J: h# |$ E8 u
DataList1.RepeatDirection = RepeatDirection.Vertical
- I6 x9 ?0 r2 r w End If! y" T1 l0 c" b( e# A: @) i( F
If lstLayout.SelectedIndex = 0
5 J- M& @7 }0 V$ @& H DataList1.RepeatLayout = RepeatLayout.Table
5 g! H4 K! r, B Else
& B8 ?1 I/ x5 G7 D, W0 x DataList1.RepeatLayout = RepeatLayout.Flow$ n+ m' J. D2 |
End If
4 n6 C% e- R. {$ F- D5 `/ Y If chkBorder.Checked And DataList1.RepeatLayout = RepeatLayout.Table Then, z I( i( n% c# m5 u
DataList1.BorderWidth = Unit.Pixel(1)! B2 D9 U# k& g( c: d
Else
4 {3 |. i7 a) u _9 O& a DataList1.BorderWidth = Unit.Pixel(0)! T6 ?' a z" t9 _+ M$ r
End If
$ S3 m' R1 }6 u6 u5 ~ L3 h$ @+ h9 ?2 m/ o) b( B ?2 D
If chkGridLines.Checked And DataList1.RepeatLayout = RepeatLayout.Table then
* @$ b8 U2 K$ H8 R1 W DataList1.GridLines = GridLines.Both% O3 r: y7 k4 ?7 W7 e- ]
Else
3 G1 W5 x( y8 V% { DataList1.GridLines = GridLines.None2 n4 V2 V4 T3 H K
End If
; _' W4 d; t2 O( c& ^) l7 i) t" [ DataList1.RepeatColumns=lstColsPerLine.SelectedIndex + 1
# s) Q, q- J1 _6 Z. w2 j' |7 g End Sub
$ r" @/ }3 g1 N2 ]9 s+ _</script>' }0 V9 _2 I3 n. z
<head>+ u& G+ k& O4 q; ]
<title>
1 ^4 C6 W9 E) X' \3 V. m. g z数据列表实验; [5 c; q% Q7 R( [
</title># H1 c8 b2 P" B+ V' d
</head>3 Y, _4 l2 q2 l d- I; L1 S
<body>! D) z4 B7 P1 a3 e8 o, e
<center>! B, O1 a6 S0 l; M: b3 n- L
<h2>$ ]# z0 {: }1 }* R j
数据列表属性方法实验! s- @& Q( f( n3 U
</h2>2 n, k j( I1 @ x% w2 k, f
<form runat=server>* ]' ]; \+ A+ [. I/ q% E
<font face="Verdana" size="-1">
' X2 ]) y0 Q: h <asp:DataList id="DataList1" runat="server"; w) Z, `+ Q, b* z
BorderColor="black"! k) `! i% n* _
CellPadding="3"
2 ?& D0 B( S. v Font-Name="Verdana"
, M8 o/ N- ]: f) {6 X7 i6 T Font-Size="8pt"
& x+ h1 P4 P$ w. a& C: I. g HeaderStyle-BackColor="#aaaadd"" i: |/ n- u& t# L0 X( i- U
AlternatingItemStyle-BackColor="#ccccff"4 E# J9 y* B- a' ^& Z" r
SelectedItemStyle-BackColor="#ffccff"- q% r) x" e }" d; S9 I3 ~- d
OnItemCommand="DataList1_ItemCommand"4 O: ]" d1 c4 N
>8 O* I' }+ r m5 g3 a
<template name="HeaderTemplate">
! [2 e/ y2 \3 N- G1 m <h><center>内容</center></h> k5 I" n: ^7 ?( ]
</template>( L' a& ^5 q( |# z" e! ?+ N; U" S
<template name="ItemTemplate">
/ c6 d! j+ q% |: [ <asp:LinkButton id="DetailBtn" runat="server" Text="详细" CommandName="select" />. L, f1 q1 H2 P, `# V
<%# DataBinder.Eval(Container.DataItem, "Content") %>
( m" G; g+ k2 d6 d) G0 G3 | </template>: j3 @ D; l8 Q |( {& |" T! C
<template name="SelectedItemTemplate">: E9 G y8 d- }. l# F$ A
<%# DataBinder.Eval(Container.DataItem, "Content") %>已经被选中3 X L5 ^4 [% I) d6 i
</template>3 H" ^: m! @7 C! f* |6 T v+ b
</asp:DataList>
6 l1 d0 U8 P8 D W8 X- ~% _6 R <p>
6 H# W: Y$ O5 q' i' G+ N) v5 l <hr>
7 ?( J, Q7 Q5 S# p' F2 K9 p 显示方向:
( ^' Z: E8 T( W, u5 Z/ { <asp:DropDownList id=lstDirection runat="server">, S0 l6 |. [/ N- M6 ~0 n c
<asp:ListItem>横向</asp:ListItem>+ J- k5 t8 u7 `" D7 @
<asp:ListItem>纵向</asp:ListItem>
5 h3 \: Y( J0 r1 U5 W </asp:DropDownList># Z4 z/ i, l- T; I& y7 x4 D* j
布局类型:" d) B/ c( |1 U) m0 k
<asp:DropDownList id=lstLayout runat="server">
) g& ^# e3 e1 O <asp:ListItem>表方式</asp:ListItem>
$ w* V1 L+ i* \8 u C) L6 x6 ` <asp:ListItem>流方式</asp:ListItem>& ]1 t+ K% n5 k7 \) Q4 L
</asp:DropDownList>1 Z+ [) g! ?' G$ h
一行列数:" g: Z. w3 D' z1 \' }1 _
<asp:DropDownList id=lstColsPerLine runat="server">
& v% Z6 S+ v5 \4 U ^$ O* O7 b <asp:ListItem>1列</asp:ListItem>
2 {3 A. U, ?5 \6 F7 X <asp:ListItem>2列</asp:ListItem>! U5 b3 x7 D0 d/ b2 h; g9 f* ^0 t
<asp:ListItem>3列</asp:ListItem>
" S6 E: b/ w6 _/ |: B4 J+ I <asp:ListItem>4列</asp:ListItem>- [+ N1 A. y) q/ |$ c$ v3 r7 C
<asp:ListItem>5列</asp:ListItem>
^! b3 B7 ]8 ~) L1 D! y1 Q( b </asp:DropDownList>
3 l. J* b4 H' v 边框显示:
4 A% y4 ~( j, j% t O; g( m: O <asp:CheckBox id=chkBorder runat="server" />0 d& b+ j+ z* J' L
网格显示:
5 ~% @5 _$ k+ d- {4 G<asp:CheckBox id=chkGridLines runat="server" />
% F4 J. _! m7 V, b <p>
1 E: ?3 _: A" v4 \' m s# N5 ^
5 ^; l% A) V2 h! z <asp:Button id=RefreshBtn Text="刷新界面" OnClick="RefreshBtn_Click" runat="server"/>
: s5 l; C) N* b v 6 g1 k1 J0 F- l& H4 x) `
</font>
% C6 i( m% X2 s- K7 f </form>
' b& s; N2 g$ z! f, R& j6 _# \8 I </center>
6 p a4 }- h; ?: \4 `</body>- \+ ?5 r- R* N8 q
</html>% X B, \8 }% o: G# T8 `% t5 \
2.开始时的界面显示如下,(方向为横向,表方式,一行一列,无边框及网格)
& x' M9 y$ h( s" q' x0 S
! |5 ]# y8 C9 P# _3.当选择显示方向为横向,表方式,一行含5列,显示边框和网格时,界面显示如下:
% T$ ^) }5 s4 | M- ^/ A* e4 T+ Z9 }
$ n( a* h' j p) n1 h! D; ^( G& A4 v0 N
! n$ W( u' U" P) G7 t `2 c) B( Z# T) ]3 P' X! W
7 I, N; ^5 q$ o+ k8 u
. `7 v; K( e6 O+ s3 w3 ]8 K4 _4.选择纵向显示,表方式,一行含5列,无边框,无网格时,界面显示如下:! c/ f: b3 n+ c$ U' |
5 b% P3 i8 |% H6 }$ \9 Y* U
5.当在步骤4的基础上选择了第5项数据项时,界面显示如下:
& [" s' `5 F, z9 C- f7 t: m2 C' C: G, H! Z( ? d1 c* a% F
接下来,我们讨论一下一种比较有实际意义的应用,即对选中数据项的修改的实现。2 J! {% L. {, ]0 S. Z
首先是对模板EditItemTemplate的定义,通常做法是排列可以进行修改的内容,然后定义一个修改确认键和一个修改取消键。
4 v, \. S4 [+ a% V/ _然后应定义数据列表支持的三种消息处理函数即OnEditCommand、OnUpdateCommand、OnCancelCommand(编辑事件处理、修改事件处理、撤消修改事件处理)
' |5 a/ v0 h7 s* [! S- |; d. @2 |3 N0 D& f编辑事件处理:通常设置数据列表的EditItemIndex属性为选中的数据项索引,然后重载数据列表。
! B& @' D' `+ v$ U" _5 l% k- n4 DProtected Sub DataList_EditCommand(Source As Object, e As DataListCommandEventArgs)
& j2 C( `+ z8 C8 p2 `! [5 R DataList1.EditItemIndex = CType(e.Item.ItemIndex, Integer)
5 T5 o- t" @- V; M) g. O ‘重新加载并绑定数据/ k- P( e2 ~5 {
BindList()4 o. a5 k* X% `
End Sub
8 `+ p1 p# I Q取消修改事件处理:通常设置数据列表的EditItemIndex为-1,表示没有数据项需要修改,然后重载数据列表5 Y( F3 {' b+ S) I8 P6 j' q+ }
Protected Sub DataList_CancelCommand(Source As Object, e As DataListCommandEventArgs)
: u& @( m- p- B+ s5 a0 h! }( w1 y DataList1.EditItemIndex = -1
/ b1 {# V% z# E3 t BindList()+ a! q6 o4 R4 X, D7 e6 _: l
End Sub
5 b+ O2 R/ V2 P- e( N修改事件处理:通常先修改数据源的数据,然后设置数据列表的EditItemIndex为-1,最后重载数据列表。
& K/ ]4 q! w1 K9 f9 v2 [/ c( xSub DataList_UpdateCommand(Source As Object, e As DataListCommandEventArgs)! d; n6 e' w* {- |) D3 {! n
‘修改数据源数据,应根据具体情况而变
9 @8 A8 r+ P: T9 IModifySource()
; v* |* ], I. L& m4 V9 t2 ~- [- }DataList.EditItemIndex=-12 M/ ]4 N% S. N E
BindList
3 w; {) s7 |$ {End Sub7 I- N: o! V6 U# m: c
例子:显示一个关于书籍修改的实例。一条书籍记录包含序号、书名、价格信息。初始化数据时,我们设置序号为1-6,书名为“书名”+序号,价格为1.11*序号。0 w2 _: k, u2 g+ }
1.源程序(FormDataList01.aspx)
: Q2 ?8 g+ j5 h* W<<!--源文件:form\ServerControl\FormDataList01.aspx--># h" b0 m, j9 s& ~
<%@ Import Namespace="System.Data" %>* d3 g8 c8 d6 [+ c. G; [: ?; Y7 g, l
<html>2 H7 A7 }+ m9 d, P: `4 F( X2 D" H
<script language="VB" runat="server">: N0 ?1 l/ A& @! h4 L/ E
dim Book As DataTable
& E* T. i# t0 O dim BookView As DataView
& B, X% `' @2 R8 D '设置数据源,并绑定, z' ^; `( c3 R; O; B
Sub BindList()" b( ? l7 m* A
DataList1.DataSource= BookView
# s8 }' l5 m/ r3 }$ P/ c4 w: { DataList1.DataBind
! h" f! m8 K/ z3 A End Sub
, g; G( m2 n+ q# k( Z. X7 k& y' ^# W% T+ K Sub Page_Load(s As Object, e As EventArgs)
2 F% W* s. M! i; E6 b Dim dr As DataRow! l7 ]3 U+ S4 H1 n$ k' |
'如果没有连接变量session_book,定义数据表Book,并载入实验数据
7 N$ e% l i% A% T5 Oif session("session_Book") = Nothing then4 M5 ]8 @+ K( w# Y* ?( \
Book = New DataTable()# x8 Q* _) X) W4 M1 R
Book.Columns.Add(new DataColumn("num", GetType(string)))
; Q+ U4 R- K( s: ^0 _ Book.Columns.Add(new DataColumn("name", GetType(String)))6 _& {4 T; ?6 ^+ i$ d0 {
Book.Columns.Add(new DataColumn("price", GetType(String)))
A7 L* |3 Q# _$ m8 _% _$ |- @ session("session_Book") = Book
* M0 ^7 E8 N$ w) ]( v '载入部分测试数据 Z6 `1 V+ j7 d/ d% b2 q$ D
For i = 1 To 6& ~+ D5 e7 }$ b m! ~1 X: X1 x5 ~
dr = Book.NewRow()
: H* g3 `5 m4 V) o- k2 w; x dr(0)=i.ToString
& r: a& M1 g- l- [ dr(1) = "书名 " & i.ToString
; K& d+ t. W4 e: x dr(2) = ( 1.11* i).ToString
, g% l# U" H8 ]4 U$ j) p( D Book.Rows.Add(dr)
; Z5 R* [( B9 c# K J% h; S3 b# O Next
( a/ M0 |8 M8 x' }9 M '有session_book变量,直接引用
& u+ L5 x1 e- l* y( F9 H$ {) k Else9 v- W& Z/ v- n! r5 s, y }5 s: ?
Book = session("session_Book")3 k5 C, h" a" S% g& L9 u7 u/ A
end if
3 O" Z. p- f) O6 a; U; w9 a- T '产生数据视图,并按num字段排序
5 i: G6 ~% Q. ^/ B& [& ]! b4 A* U" s BookView = New DataView(Book)8 T( F: }! C1 c3 u# S g0 b
BookView.Sort="num"
0 k1 D2 [; I5 x$ F '初次需绑定数据源
( c- C; a! M" o* O0 q# O$ H if Not IsPostBack then
6 K; o9 t! u* x9 e4 I+ \6 a1 h5 { BindList
- U% V0 h- a6 F2 U0 |9 J- s9 Q End If6 a* o$ N. M+ \. u/ k
End Sub4 a) D$ O+ R {- x2 \0 f! b; j' [) p
'编辑处理函数 E, Y; Y e+ Z0 H
Sub DataList_EditCommand(sender As Object, e As DataListCommandEventArgs)
" ~* ~% J( T* Q B) o' }" j0 a9 J DataList1.EditItemIndex = e.Item.ItemIndex
& Y* T( h( b& @2 f. e- H BindList g& }. [$ }$ u, z; W9 P. ]* K- C
End Sub
* S/ e) y) r; d) v8 \+ W8 Z7 } '取消处理函数
) U4 S9 N! _$ K' E3 ]7 a3 } Sub DataList_CancelCommand(sender As Object, e As DataListCommandEventArgs)
4 W8 `/ q, N" F+ E+ Z4 n DataList1.EditItemIndex = -1
+ G$ A, R' F% j N: C6 i BindList
- V5 j& O" X2 S End Sub2 p( E% n# p- _" h! S$ U
'更新处理函数% |3 f8 o8 \1 h8 R% H, Z
Sub DataList_UpdateCommand(sender As Object, e As DataListCommandEventArgs)( P+ X+ \! p6 \* Q+ a1 ^( {( T
Dim lbl1 As Label = e.Item.FindControl("lblNum")' s! y4 T/ t$ L
Dim txt2 As TextBox = e.Item.FindControl("txtBook")
) Z* t, _* O& U7 H Dim txt3 As TextBox = e.Item.FindControl("txtPrice")6 u g! K* u; i$ w$ c. H% R) R0 `; q
( c' D: Q5 K; |5 }$ r8 n dim strNum as String
; J$ [: U, t `2 _: w- \, K2 ] dim strBook as String
7 q7 K& C+ S2 @ X. d dim strPrice as String
$ z% n0 c+ h) ^ strNum=lbl1.text v6 ~# B0 Q, b8 a$ Q# h; E
strBook=txt2.text$ T# ~4 x) g7 w7 p4 g
strPrice=txt3.text
' t" ~' i# [' T: j2 D '用先删除再插入的方式,实现数据的更新操作
* P+ a* q: {0 o+ ^2 N; }5 t BookView.RowFilter = "num='" & strNum & "'"2 a! G7 I) R2 p3 R P
If BookView.Count > 0 Then
: T8 w+ g: P& {' b, p4 n BookView.Delete(0) W* ^/ v; l8 v3 s4 o4 `
End If% g. J2 `1 k3 V S
BookView.RowFilter = ""
# t& n; x& W% _, ddim dr as DataRow=Book.NewRow()
2 o7 n! l4 Q9 G/ U dr(0) = strNum
4 E% v, g. v8 u+ o% | dr(1) = strBook8 U) b+ |) r) I3 s
dr(2) = strPrice
+ s& o+ B* g3 I: {# q: e/ \ Book.Rows.Add(dr)8 ~% |8 k Q& B( q Z6 D0 w
DataList1.EditItemIndex = -11 t' @, t7 T7 M. F7 g* ~) h8 ^" A
BindList
7 E0 {; U8 a" l* n$ Q End Sub
* ^. B. Z4 }/ i: D; l </script>2 i7 t- i. N7 `) o& S7 C% h# p
<head>' H( B/ C5 o- v( q4 ^2 }& o4 A9 k" R
<title>
7 u+ j* E9 X; Q数据列表修改实验
9 D6 w8 h/ F9 T/ l</title>
& X4 i) g8 R' F</head>
- T8 ^9 i+ M9 B$ t<body>0 O' @( L% J/ c% g) |+ f" h
<center>; x) L" Y, `- W) Q% r2 }* ]7 G
<h2>数据列表修改实验</h2>6 u) L$ G( ~7 \0 n$ }; g1 R- ^5 Y
<hr>
5 q5 V7 q- ^$ k <p></p>
1 [! m: H" s `! h! o C <form runat=server>
9 F @- Z4 w% D& h4 b <font face="Verdana" size="-1">
9 V& r& ?! x6 j# s, Q( b <!--编辑时显示绿色,并定义编辑、修改、取消时的处理函数-->
{; ]2 ~0 X: Y" I- R <asp:DataList id="DataList1" runat="server"
. l+ e( a( s& f+ b8 [7 p BorderColor="black"8 R) e; e% N# k
BorderWidth="1"; G" |; S# }2 |& E' ^
GridLines="Both"+ b$ {! b9 o$ `( i% `
CellPadding="3"; q5 A: ]: x' V" M" h2 n' ?) i
CellSpacing="0"
9 `* I* V+ C5 J Font-Name="Verdana"3 E3 [$ C ?) v. D! w& e
Font-Size="8pt"( n2 v0 M# h0 t5 M: u/ e) b
Width="150px"" N5 b2 D' V6 x& }
HeaderStyle-BackColor="#aaaadd"
" Z* d! X& G& K; e3 \, d. i2 z1 e AlternatingItemStyle-BackColor="Gainsboro"$ H% P$ w6 \: J1 | n: o
EditItemStyle-BackColor="green"' k! p( P2 j' s u; k) ?; P; R" M
OnEditCommand="DataList_EditCommand"
@. q) a( u. W: ~" {2 \5 U OnUpdateCommand="DataList_UpdateCommand"4 i: B2 g1 e& K7 Q! N0 i
OnCancelCommand="DataList_CancelCommand"- L# Y5 E9 k; r @4 k! a! E
>
$ S! c0 j" n# D' m( A( t! C, N; k8 Z <template name="HeaderTemplate">
" Z/ y, S% }! q, g7 C! q$ W2 m <center><h>书籍序号</h></center>
* r5 ^ h7 ]9 m; C% ] </template>( t0 }+ d# Y& c; Y& I# C* I
<template name="ItemTemplate">
6 a6 R3 E& O g4 c* E <asp:LinkButton id="button1" runat="server" Text="详细" CommandName="edit" />
3 O# d8 D& `: L Z5 w <%# Container.DataItem("name") %>0 h4 i3 @2 W g& D4 G6 w- \% s
</template>; ~2 J, s. U! e" ]7 `. [1 O
<template name="EditItemTemplate">
& x: _0 o, q8 I 书籍: 序号
" ^' l. u3 b* y1 n <asp:Label id="lblNum" runat="server" Text='<%# Container.DataItem("num") %>' /><br>
& `7 I9 q2 J G$ r 书名:
: n9 b! g `/ n <asp:TextBox id="txtBook" runat="server" Text='<%# Container.DataItem("name") %>' /><br>: }& L) i( Y3 Y# o( ~1 k3 n
价格:9 S- T$ n+ I+ ]% g
<asp:TextBox id="txtPrice" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "price") %>' />3 N- ]0 b; w: i! s" H! _
<br>
" o# ?, i6 Z* A. F4 Z: {<center>8 p. c/ i8 x0 Y( t4 |% F
<asp:Button id="button2" runat="server" Text="修 改" CommandName="update" />
& f6 v$ M! e L6 Z <asp:Button id="button3" runat="server" Text="撤 消" CommandName="cancel" /> M; Z& u# m/ d4 y5 @9 p
</center>
5 i* j. h: Y: K' M/ V& N6 j </template>9 |& G0 W+ d7 B( @( P1 v: @
</asp:DataList>
3 F: ~/ h! p* N8 Z" g( _* b; a </font>
" m( b( l+ F3 |, T. {4 }7 X% L </form>
- {3 Y; W0 u5 K, J7 M/ m. |) a6 ]</center>3 b; t$ W% \3 P4 B3 w4 g
</body>$ k2 H2 e5 _ y+ |1 s. y
</html>" T# h& }$ I; Y; b
2.准备对第2项进行修改,此时的画面如下: K, X7 H! C/ ~) P
5 c! V9 L& C7 y% m# ?$ j* K/ ~' F3.把序号为2的书籍的价格改为9.99以后,重新进入其编辑状态后,它的输出画面如下:" {3 k3 C. @! R% l4 G1 r/ q
2.2.15 数据表格DataGrid9 T! N/ H$ K3 A8 r5 }2 p3 @' a
数据表格服务器端控件以表格形式显示数据内容,同时还支持数据项的选择、排序、分页和修改。缺省情况下,数据表格为数据源中每一个域绑定一个列,并且根据数据源中每一个域中数据的出现次序把数据填入数据表格中的每一个列中。数据源的域名将成为数据表格的列名,数据源的域值以文本标识形式填入数据表格中。; E0 K( P9 b+ Y9 `- O
通过直接操作表格的Columns集合,可以控制数据表格各个列的次序、表现方式以及显示内容。缺省的列为Bound型列,它以文本标识的形式显示数据内容。此外,还有许多类型的列类型可供用户选择。
# K/ Q' X' Y2 o u$ u! i列类型的定义有两种方式:显视的用户定义列类型和自动产生的列类型(AutoGenerateColumns)。当两种列类型定义方式一起使用时,先用用户定义列类型产生列的类型定义,接着剩下的再使用自动列定义规则产生出其他的列类型定义。请注意自动定义产生的列定义不会加入Columns集合。
$ G% {% Y5 U5 z: L" a列类型介绍:2 ] `, k2 z7 `: ? o# o
1)bound column ,列可以进行排序和填入内容。这是大多数列缺省用法。
8 Y4 F( K7 O( B" r' o 两个重要的属性为:HeaderText指定列的表头显示0 m9 E q0 j8 Y# U, F/ P
DataField指定对应数据源的域! x5 ]) [( V3 I4 k. f" U
2)hyperlink column,列内容以hyperlink控件方式表现出来。它主要用于从数据表格的一个数据项跳转到另外的一个页面,做出更详尽的解释或显示。: J3 d6 `7 C3 J9 H
重要的属性有:& E$ @1 o0 ~8 F, V+ B' F
HeaderText指定列表头的显示
+ }9 x% \! _7 L8 c* h/ A% NDataNavigateUrlField指定对应数据源的域作为跳转时的参数" k9 ]3 x* V7 T" M" ?. r( W
DataNavigateUrlFormatString指定跳转时的url格式' M; I7 b9 p/ ^. h
DataTextField指定数据源的域作为显示列内容来源8 L6 z- z* B+ W1 p) {$ [ j$ v
3)button column,把一行数据的用户处理交给数据表格所定义的事件处理函数。通常用于对某一行数据进行某种操作,例如,加入一行或者是删去一行数据等等。
m& I. K7 V5 i7 L! x重要的属性有:
9 W* \3 S4 i% z& mHeaderText指定列表头的显示0 u. \: V6 K. D9 c
Text指定按钮上显示的文字8 ]0 v1 R( }& `( A: p
CommandName指定产生的激活命令名
; }' J* F- S4 b4)Template column,列内容以自定义控件组成的模板方式显示出来。通常用作用户需要自定义显示格式的时候。
$ [, h% L, Z- U+ ~2 |( N! p7 j5)Edit Command column,当数据表格的数据项发生编辑、修改、取消修改时,相应处理函数的入口显示。它通常结合数据表格的EditItemIndex属性来使用,当某行数据需要编辑、修改、取消操作时,通过它进入相应的处理函数。例如,当需要对某行数据进行修改(update)时,通过它进入修改的处理步骤中。- U$ P5 J* _& O* _& L
其他重要列属性介绍:% [2 }" S0 N0 u( e% E
1)Visible属性,控制定义的列是否出现在显示的数据列表中。
m$ g* ^2 J0 t2)AllowSorting属性,是否可以进行列排序。当AollowSorting=true时,可以以点击列的列表头的方式,把数据以该列次序进行排序。缺省的(即载入数据后)的排序方式,实际上是以数据在数据源中的排列次序进行排序的。
; k% a* }% c7 \4 q- u9 D w5 |3)AllowPage属性,是否以分页方式显示数据。当对有大量数据的数据源进行显示时,可以以例如10行一页的方式来显示数据,同时显示一个下页/前页的按钮,按下按钮可以以向前或向后的方式浏览整个数据源的数据。当AllowPage=true时,即以分页方式进行显示。可以通过设定CurrentPageIndex属性来直接跳转到相应的数据页。
( U# g8 s( C2 ~! G5 e例子:演示以上各种类型的列定义的用法
$ h; K% r+ c- E) K/ N9 i! B1.源程序(FormDataGrid.aspx)
+ D A0 o9 G) U+ w- x<!--源文件:form\ServerControl\FormDataGrid.aspx-->
( B# k( w7 X$ K: P$ R6 F( f8 p" k<%@ Import Namespace="System.Data" %>
1 G* G% S, }( \& P<html>
) S. Z5 j6 U' b, p4 ]<script language="VB" runat="server">8 N; E( q& R% K9 i
dim Order as DataTable
. M* K" C- \: o# R9 Z' w! W) Y dim OrderView as DataView8 o `# ?4 H) b; v- C! O
'对数据表格1创建数据表,并返回数据视图
! N' t) G5 T" b Function LoadData() As ICollection
% H9 E7 Q5 L/ |- ]9 C& X& K ! P& u" L, b. [6 e1 {* k+ x7 c
Dim dt As DataTable/ s `3 U# ? `' ]' p% d8 ?
Dim dr As DataRow8 ^0 e+ r. [& A6 U! e: o% F
Dim i As Integer
- t% t! h* r: c- ^" u) _4 {. P '创建数据表
% {; a& S% j' [2 X dt = New DataTable
# a% Y* X% k | dt.Columns.Add(New DataColumn("Num", GetType(Integer)))
& a* c" t) Z% a/ ^5 t. H dt.Columns.Add(New DataColumn("Name", GetType(String)))
+ J- B9 x3 y* n9 R+ M8 T dt.Columns.Add(New DataColumn("DtTm", GetType(DateTime))). s" m' S1 Y8 {+ F6 b
dt.Columns.Add(New DataColumn("Assembly", GetType(Boolean)))
& ^1 ?1 y% I) l8 }+ o% U; H# K8 p dt.Columns.Add(new DataColumn("Price", GetType(Double))), X9 S, `. U; l/ a! T8 } M2 Y! T! j
'载入数据
0 b* }6 g+ U4 \7 x _0 g For i = 1 To 6 d9 m" v/ x( ~' H0 e7 h
dr = dt.NewRow(); S" P4 ^. I& ^7 f5 i
dr(0) = i" t5 c/ O3 a9 Y0 G, V0 l
dr(1) = "书名 " + i.ToString()1 \( e0 b8 w3 [0 S; I
dr(2) = DateTime.Now.ToShortTimeString
% d6 g6 g. ]1 F. ?& D If (i Mod 2 <> 0) Then j1 [1 W/ S8 Z" C1 S. \
dr(3) = True3 V& \% v/ d! c J
Else
$ W% l ^6 B' n8 \ dr(3) = False
$ g) \ h5 R" D End If
6 Q3 T0 b" {& n9 r9 i% l' b d dr(4) = 1.11 * i
) [% [+ A( W' X$ V9 Z$ C. j '把产生的数据加入数据表中/ W' b" L+ l. J# Y; c" D: z$ `
dt.Rows.Add(dr)
( z/ B9 u8 Z6 d; g; J' a( Y Next
& C$ \" w7 N* L! m8 P0 G8 V
5 c1 W, K) o% b/ k1 r: `/ s* Q LoadData = New DataView(dt)2 G k% O' ^- Y" ?" s
/ H; \' c3 M& G End Function7 w* h0 {8 V8 Q7 C }- m! {4 ?% x% H
'页面初始化,分别对DataGrid1和DataGrid2绑定数据源1 ?# ^8 O5 U: `/ I8 I6 s) B* D
Sub Page_Load(sender As Object, e As EventArgs)
1 ~7 T0 x& Y1 A" }: _( H8 R
" {8 [2 J8 n! l; S If Session("session_order") = Nothing Then8 j4 f; g5 J' x; @- R$ H, R; }, |* \
Order = New DataTable()/ L) U* W& P" ]& x
Order.Columns.Add(new DataColumn("Name", GetType(string)))
3 v* `/ a+ _$ ? v# G# g Order.Columns.Add(new DataColumn("Price", GetType(string)))
) W8 I. C3 C% ^$ `4 W Session("session_order") = Order
* [& z: s/ O; M# H. a Else
. M' C d. { o$ g4 b% Q. x, k Order = Session("session_order")
& x9 w$ x& ?0 f$ K6 ~5 g" O End If ) j: R- c0 R2 Y, \, c
OrderView = New DataView(Order)
5 w$ P" l. }$ Y4 s6 ]/ p1 L DataGrid2.DataSource = OrderView
3 U; c/ Y% }: |# n4 |8 c DataGrid2.DataBind
9 x& P0 a/ B$ g' b: M& D. s' r If Not IsPostBack Then7 N/ E+ V6 H+ c$ H1 u9 n T# b8 E5 g
DataGrid1.DataSource = LoadData()
; C. f1 I7 }/ `+ ], S; n DataGrid1.DataBind
$ r }2 \% l# Y5 |8 Z End If
( N) @: j' n; E6 V7 V End Sub
' u0 a( W+ U6 o4 f. L6 W H& J '对ButtonColumns的处理函数集合
, ~$ V) z" s2 f$ Y$ f7 L# N- N% s% y Sub Grid_Command(sender As Object, e As DataGridCommandEventArgs) % T( d% g0 w! ?7 k8 P4 F- Z
+ }2 m- n1 k7 \" [. ^' _9 K Dim dr As DataRow = order.NewRow()
6 ^( B0 Z+ N) x, w) A6 r
. Z; Y6 P3 U' N! @3 n8 C y. ^ Dim Cell1 As TableCell = e.Item.Cells(3)
0 R$ Q( A6 w* ^5 d& `! |/ j) l3 l Dim Cell2 As TableCell = e.Item.Cells(6)
- f7 h$ ~6 M7 I Dim name As String = Cell1.Text
% m& R8 ~' f6 M2 I0 j4 T2 [- \ Dim price As String = Cell2.Text
9 F( N0 T6 p- t: K7 D 7 q, f" h9 u C: K7 G& q+ \
If e.CommandSource.CommandName = "Add" Then
0 t H/ q; Q$ b# n9 T" J5 g( W/ w dr(0) = name
0 G* H5 V8 t4 j' o+ a dr(1) = price
' W5 c2 w8 t% R. I4 [( b7 C. H& J order.Rows.Add(dr). E0 C- l- C$ d+ C
Else : u( E% e$ I: C9 s2 D
OrderView.RowFilter = "name='" & name & "'"
5 x. ~6 N5 \* w7 l If OrderView.Count > 0 Then
) Y! }3 m- p2 d$ Y. a OrderView.Delete(0)
2 ]- }, o1 ^, l w$ C$ L) G' x% L& b End If( b3 |6 \& y3 |& W% D
OrderView.RowFilter = ""! e" d! f1 q1 U0 X9 j
End If* S: s. ]3 M8 ]* e
DataGrid2.DataBind()! r% ? |' t7 v( @* v/ c" x) J, i
End Sub8 w, ^0 H2 C3 x" J$ R2 i/ y
</script>3 B3 O3 b) S' M1 i# e
<head>2 @' M/ q5 R( w7 G4 H k( ~: }
<title>
& I% @: W! ^+ {0 I1 P3 L. C数据表格实验6 m1 D Y; X8 [. o/ q
</title>, J6 g; B& _3 m) I! d
</head>9 b3 ^' D- X+ c8 L
<body>6 [* f" ^0 l( K# T1 K
<center>
1 o: s9 [1 x1 B. w4 g2 p <h2>数据表格列类型实验</h2>
. p8 i$ P4 I+ Z; l <hr>6 S# I. w: z6 U9 W7 ~
<p></p>
" C! g$ Q, g( M9 k/ V: D7 E1 `8 ^' a <form runat=server>
1 _4 [' V7 [( p H: Q <h3><b>图书清单</b></h3>
0 g( n! [+ J% G+ F# { <ASP:DataGrid id="DataGrid1" runat="server"$ |4 w4 p m0 a3 c
BorderColor="black"+ d8 t9 j) c- ]9 g( O# e
BorderWidth="1"9 f4 U! j) {9 S
GridLines="Both"8 v; w7 U* s9 {; L
CellPadding="3"; x' f: T1 N$ _5 I" T6 b& f
CellSpacing="0"; Z8 `# [# I# @$ E
Font-Name="Verdana"
+ E$ L2 j7 {( o" J: h- K/ u6 x Font-Size="8pt"5 L8 A% G p; o* b4 O
HeaderStyle-BackColor="#aaaadd"
* m* @. X: S# J1 {) @4 K: R# _ AutoGenerateColumns="false"
; g5 Q% w' D0 S$ t OnItemCommand="Grid_Command">/ }0 z2 P S0 {/ U! ~6 n; o
<property name="Columns">
0 Z8 N9 o ~( T6 I. K% A. U <!-- 2个ButtonColumn示例-->5 ?2 ^9 \+ r( j# P' \3 H
<asp:ButtonColumn HeaderText="操作" Text="订购" CommandName="Add" />" b; L/ e: c: e5 g5 S- v
<asp:ButtonColumn HeaderText="操作" Text="退订" CommandName="Remove" />: @. x1 D. X. o" D1 R& M
<!-- HyperLinkColumn示例 -->9 y0 x/ U9 s, W% c ~' r
<asp:HyperLinkColumn# o0 G1 o+ M" S! ]" G/ L
HeaderText="链接"( S3 w, d) S6 }, A% C7 U# {
DataNavigateUrlField="Num"
/ M6 F/ a7 l" ^( C, |" {# l- L4 H; O+ _ DataNavigateUrlFormatString="FormDataGrid01.aspx?id={0}"0 P- ~) L4 p' a, y* Y% z3 _/ K
DataTextField="Num"& \0 I3 ^2 `+ E- E$ u; A+ m7 K# s d, r
Target="_new"/ m v7 ~; j' Y- |
/>) _+ Y- v9 x3 H/ v0 B
<!-- 2个标准BoundColumn示例 -->
" O" O# |2 y2 i; x1 I$ Z w# f1 u <asp:BoundColumn HeaderText="书 名" DataField="Name" />
# e2 T5 p% J0 C `9 r7 C <asp:BoundColumn HeaderText="入库时间" DataField="DtTm"/>8 ^8 N B4 z' o* c5 X/ Z9 k1 q
<! -- 1个TemplateColumn示例 ,以CheckBox来表示布尔型数据 -->+ J7 |# t3 i7 `
<asp:TemplateColumn HeaderText="合 集">$ P" T7 m6 G# M( u, I+ L( V* v
<template name="ItemTemplate"> s9 ?' \5 s. p6 r; h6 e3 h
<asp:CheckBox ID=Chk1 Checked='<%# DataBinder.Eval(Container.DataItem, "Assembly") %>' Enabled="false" runat="server" />2 n& w( [- z3 E) G* r8 S. a
</template>
: [* R$ @2 k* p! A$ t% h7 w4 p% } </asp:TemplateColumn>
8 U8 m4 `. t: B* i- _: c9 j0 N # `3 u+ L" J+ ?
<asp:BoundColumn HeaderText="价 格" DataField="Price" DataFormatString="{0:c}" ItemStyle-HorizontalAlign="right" />
: a6 f: n7 y5 Y W w' c2 }" v7 ` </property>, s. p# M, x/ z8 l; C, b9 P
</asp:DataGrid>
/ q* Y$ U! z7 {) | <hr>
; e4 V9 O9 h. {( O$ f8 B* B; j <h3><b>订购清单</b></h3>
O7 p) b+ o, @1 k4 k <ASP:DataGrid id="DataGrid2" runat="server"+ g# i/ f/ a& X3 \& y
BorderColor="black"
, j( \, m0 f/ I. e3 K' B$ H! T+ \- T BorderWidth="1"
1 o) i1 j4 v1 H$ K2 ]: x) e CellPadding="3"$ r- n: R7 X2 f. w- S5 P- t) Q
Font-Name="Verdana"2 [3 w2 A; e N" L2 F; F
Font-Size="8pt"3 E' I* _; f Q1 ?, G/ K6 B7 r
HeaderStyle-BackColor="#aaaadd"
& Y. J: | q1 v. A7 G />& _1 {6 ?, F% T- J+ e
, a5 `+ C' J7 P
</form>$ Y2 P1 s" v! q& A( I' [
</center>
4 f$ q4 t/ z! L2 ?' Z- I$ @</body>5 q0 ]$ B4 V+ f% X a8 Q5 a2 p
</html>; b' ]( q# q/ L4 U- N5 o
文件FormDataGrid01.aspx的内容:& |9 g9 Z, v7 k' U
<!--源文件:form\ServerControl\FormDataGrid01.aspx-->! m6 v9 j7 M7 m( s9 |0 M2 t
<html>
# L% M6 e( f2 S! |<head>, q; w- E( w' [# f3 j
<title>! f, ~+ }& S5 M7 l! q4 |' u
数据表格链接测试实验
8 S% g5 Y0 T- A5 L- z* B( Q/ b</title>
! x4 X% d3 L1 r- k& y# w6 X3 X0 L8 I<script language="VB" runat="server">4 ]0 W6 |& `" ? y
Dim num As String
1 B) ?) \: C( ?: Q; t3 x3 W$ \ Sub Page_Load(sender As Object, e As EventArgs)
6 c* ], y& N- z* f Z, [ num=Request.QueryString("id")$ B% u2 x, K9 j/ Q
End Sub6 I4 S9 i# D9 Z. Y
</script>
, ^' Z; k1 r6 t! h3 Q9 p</head>1 b3 J" ^; W5 i# y }0 |% W
<body bgcolor=#ccccff>; x8 P5 W) }7 l* |
<center>: s5 z R$ h' X
<h2>数据表格链接测试结果画面</h2>
7 K. y% b' q2 M2 M8 Y4 r <hr># r7 a( Y& D$ S0 `( j
<p></p>
2 Q5 {) G3 j. c <h4>您选择的是 第<u> <%= num %></u>本藏书</h4>
7 f% g4 j% g, V! n" Z/ K</body>3 t0 ]0 S$ Y+ e! G+ d4 m% b
</html>
( c; L3 L! |6 U2.开始时画面:. l8 g" r+ D1 i! {9 ~: A
( y6 ^6 Q, _) v' J3 k3.当选择订购了第一本和第三本后的画面如下:
2 M9 W! F& y" P% A
w# P8 j n2 A* ^& x( {' ~+ K/ ~4.当选择退订第三本书后的画面如下:0 I& W" M0 V- R
$ Q# x' l- i7 D; C: e5.当点击连接第六项时的画面如下:
+ Q+ V7 C8 p% Y% |" b2.2.16 小结- s$ e2 l/ C! v) b; m5 [
本章主要讲述了几个服务器端的控件、它们的校验、取值方法等,从中我们可以看到asp.net中各种控件功能是非常强大的,如上面的例子所示,我们甚至可以用一个简单的语句就可以验证输入的合法性。对取值,我们也有简单的方法,对比于用html所写的代码,我们觉得用asp.net所写的是简单了很多。" x* V7 P8 C7 N! a* L
第三章 自定义控件
' v& _5 K- f: V5 P6 vasp.net中提供的增加内嵌服务器控件的功能,使你能够多次的轻松增加你所定义的各种控件。事实上,对于表单等各种控件,可以不用更改或者稍微更改一下就可以多次使用的。在通常情况下,我们把一个用作服务器控件的web表单统称为用户控件,我们用一个.ascx为后缀的文件保存起来,这样的保存使得它不被当作一个web表单来运行,当我们在一个.aspx文件中使用它时,我们用Register方法来进行调用,假设我们有一个文件名为saidy.ascx的文件,我们用下面的语句来调用它:
, C: @; Q: a7 C- [' |<%@ Register TagPrefix="Acme" TagName="Message" Src="saidy.ascx" %>
2 c1 e; _# ]* u$ r上面的TagPrefix标记为用户控件确定个唯一的名字空间,TagName为用户控件确定一个唯一的名称,你也可以用其它的名字代替“Message“,Src为确定所包含的文件名称和路径。这样,我们就可以用下面的语句来调用它了:
0 w, [6 S/ p# D6 _<Acme:Message runat="server"/>2 }3 [. T% O8 B9 v: ]" e8 R3 Q: c! O
下面我们来看看具体的应用
. H7 L9 T5 {. m0 I8 m- }2.3.1 小页面控件
* S: s! B, I5 J1 c7 j- v, ]我们建立两个简单文件来说明这个控件的使用方法:con01.aspx、con01.ascx,在con01.ascx文件里我们只有一句话:
+ c( S1 }. \9 M2 O<a href="http://www.yesky.com">欢迎访问天极网站</a>
; e5 w* w& `- P: S然后我们在文件con01.aspx里面进行注册:
5 E' w4 k2 ], y<%@ Register TagPrefix="saidy" TagName="info" Src="con01.ascx" %>
5 l- e0 T" y8 U( K( e" n1 P页面上的应用我们用这句话来表达:! e, D8 e! {: J0 r9 Z' |
<saidy:info runat="server"/>
- C: G, a ~1 A, Z6 A* mcon01.aspx文件的完整代码如下:! L9 Z( Y) o- E) l+ Q }# e
<!--源文件:form\CustomControl\con01.aspx-->1 m' _3 `& |- ?* b5 l. O" M6 c& z
<!--注册小页面控件-->
" o3 h! [& q9 m, u% n5 }$ b8 q) Q<%@ Register TagPrefix="saidy" TagName="info" Src="con01.ascx" %>* R" u, W6 j5 I! D# M% G
<html>* I* b) J4 N, G# \! M+ m# b
<body>' n5 @2 X- X3 O2 a2 L
<BR><BR><BR>3 N$ ~" q$ i+ ?
<CENTER>
' {3 _7 t# m" p# `* @/ z: s 调用结果
) t! m/ @2 ]/ |; }( n f. ]! t<BR><BR>
( j3 Q6 Y% `+ o0 i <saidy:info runat="server"/>
4 r' J9 x, `1 @6 H+ @# k( G</CENTER>6 B5 x6 y% P1 M# l8 R
<BR><BR>" b% A& |8 y) O: S0 r
</body>+ [ G2 ~" W4 J+ `
</html>% d. M4 E6 t. ]/ x- E3 J
下面我们访问con01.aspx,显示如下:2 s, d# B. b/ h: C0 E% w/ ?- \; U# n
2.3.2 代码和模板的分离( j* Z- z# F# d! A
在编制asp.net程序时,我们会使用模板(Template)。那么什么是模板呢?相信大家都使用过WORD,当我们在新建一个WORD文件的时候,我们可以建立模板。通过使用模板,我们就固定了文档的风格,这样就可以在模板上完善我们的内容。所以我们使用模板一个好处是:文字录入和编排界面是分开的。而且模板可以重复使用。好了,通过上面的介绍,我们对模板就有了一定的认识。 我们在编制.NET程序时,使用模板将对主程序代码大大简化。模板的定义是使用<template>和</template>标示符的。文件保存为.ascx文件。下面的代码是一个典型的模板的定义。0 O y. R/ g( u% B9 c. k! N: w
<template name="itemtemplate">8 `* n, l1 K: U: @$ o
<table cellpadding=10 style="font: 10pt verdana">' G9 E, C9 R* ?4 g
<tr>
2 w1 l- j/ L" I0 a; o <td valign="top">2 X1 C3 R1 _& c! r
<b>所在系: </b><%# DataBinder.Eval(Container.DataItem, "dept") %><br>6 N3 a& F3 V+ N
<b>姓名: </b><%# DataBinder.Eval(Container.DataItem, "name") %><br>
: ~" ^) h" Y& a3 Z* k% c <b>性别: </b><%# DataBinder.Eval(Container.DataItem, "sex") %><br>
. e# }1 s% b: Y5 n3 _3 g/ R" I <b>年级: </b><%# DataBinder.Eval(Container.DataItem, "grade") %>
/ T+ u# o& }/ u6 d- J </td>3 Y$ \5 G9 s' u. ^
</tr>) R- j+ d$ ]' Y, f
</table>
8 e+ ~9 ~& Z2 L5 r! P </template>/ C2 S) B, A# }( q: G" W' H
在这一模板中,我们使用了数据绑定控件,关于数据绑定控件,请参阅其它章节。同时我们还定义了数据的显示方式。那么在主程序中如何调用呢?请看下面的代码:
* N& {0 o Q# f! U4 v6 l8 i5 l1.<%@ Register TagPrefix="Acme" TagName="StuList" Src="form32.ascx" %>
: J1 I) B. I" u1 w* B( p2.<html>* ]) U: O" `5 a9 O: O7 {, L/ }
3.<body style="font: 10pt verdana"># v/ D9 x6 @: v% G& Z
4.<b><center><h3>模板示例</h3></center></b>
3 x+ H0 s) r& n/ p1 a5.<form runat="server">
$ Z$ U( G0 m4 z! z6.<Acme: StuList runat="server"/>5 N. |, i- ~9 w: U5 \! w
7.</form>
4 }/ `8 ~. d; V% R1 {8.</body>
8 C! X0 t' ^$ K9.</html>, n3 E! S* ]- i
其实,模板也属于自定义控件(User Control),所以我们在使用时,要先注册(Register)。对主程序的第一行代码,TagPrefix定义了一个不重复的名字空间(Name Space)。TagName为自定义控件定义了一个名称。然后,我们就要指明使用的模板的文件名。注册完自定义控件后,我们就可以把此控件认为是服务器端控件。要使用服务器端控件,我们要做什么工作呢?对了,要使用runat=”server”属性了。请参考第7行代码。% W0 { `; I7 {: Q$ _
好了,现在我们就看一个完整的例子!这个例子包含了两个文件,一个主程序文件(template.aspx),另一个是用户自定义控件文件(template.ascx)。先看template.aspx文件。! r% c8 s- V8 I7 b) H& {
<!--源文件:form\CustomControl\template.aspx-->
i1 t! V7 ?9 p; l8 g, P <%@ Register TagPrefix="Acme" TagName="stuList" Src="zy.ascx" %>
7 ~( k, f' N+ I. y. O <html>: d/ a. ?7 \% l6 N2 J
<body style="font: 10pt verdana">' V6 j/ ?% p! Q+ |4 Y5 }
<b><center><h3>模板示例</h3></center></b>
5 `' d# H. R1 r1 Q9 n8 g <form runat="server">
: P+ l" r3 }2 q/ r/ l <Acme:stuList runat="server"/># F( O9 a2 c% m
</form>& V$ @ o- c5 c7 \4 g* [
</body>
3 }8 q3 ^4 U5 x- g4 g4 ?2 V( G' D</html>
: N6 a1 z W: O8 t5 H现在我们再来看template.ascx:' i& m. j8 r0 t! I5 S" v& [
<!--源文件:form\CustomControl\template.ascx-->4 B* \/ } A/ w9 g A
<%@ Import Namespace="System.Data" %>
7 h2 p6 B( U% E: H/ r: s( m<%@ Import Namespace="System.Data.SQL" %>
* L# B0 U: s' N6 [; r+ J* f) |+ Q<script language="VB" runat="server">
% d6 N( O/ R3 V p+ k Sub Page_Load(Src As Object, E As EventArgs). O3 \# J8 Y% Z, E5 d' `. C* l
If Not (Page.IsPostBack); f j# S. h2 A+ }$ D% V p' s* T+ o& ^% U
Dim DS As DataSet
. b( O, [0 a- g, D5 x Dim MyConnection As SQLConnection
~* e7 I& M) y ~ Dim MyCommand As SQLDataSetCommand
+ r6 n. e1 \" H. i- B# M MyConnection = New SQLConnection("server='iceberg';uid=sa;pwd=;database=info")
, r, _5 g j* Y" F) [ MyCommand = New SQLDataSetCommand("select * from infor where dept='" & Category.SelectedItem.Value & "'", MyConnection)# b/ H1 M: ^, V# J& w: }( `
DS = New DataSet()7 R/ c/ q# C* O# ^' d+ s: D
MyCommand.FillDataSet(DS, "infor")! c' d ]' _) |3 T- L+ E
MyDataList.DataSource = DS.Tables("infor").DefaultView2 ^! J0 U0 F9 l) T1 k4 p' v! G( Z
MyDataList.DataBind()
; l3 T2 X) ?2 e) z9 d Y End If( e W: ]: |4 h! P! d/ G( @4 ?& Y
End Sub8 c2 x* V- _0 D6 r3 h% P
Sub Category_Select(Sender As Object, E As EventArgs)
2 A/ S i3 }% G7 W- t3 X$ _ v Dim DS As DataSet
9 _. ]) h [1 r7 @+ K4 g Dim MyConnection As SQLConnection( F7 D: J$ z* o: d6 K
Dim MyCommand As SQLDataSetCommand
" R0 X# i+ X6 R/ B# E MyConnection = New SQLConnection("server='iceberg';uid=sa;pwd=;database=info")
e4 c% K0 j( G" Q MyCommand = New SQLDataSetCommand("select * from infor where dept='" & Category.SelectedItem.Value & "'", MyConnection) ^2 W6 n" V* l8 v* O6 _' y- v
DS = New DataSet()
4 _, |! @1 b* S7 G MyCommand.FillDataSet(DS, "infor")% a9 i5 I5 X0 Z
MyDataList.DataSource = DS.Tables("infor").DefaultView. ]3 j8 H/ ?9 N9 F% _8 \ }; U, t
MyDataList.DataBind()
) p1 h: x4 b) h9 p& H& l End Sub5 A6 |4 A8 J2 Q
</script>
3 z0 g: B7 F' X" b! f<table style="font: 10pt verdana">
8 }! H) D( L' ~/ v<center> & \: G9 Q' F: I* p p
<tr>% i3 j% N. W( ]3 b
<center><td><b>请选择系名:</b></td></center> , J3 X: j/ }6 A4 d9 T! h- U& O
<td style="padding-left:15">
" y& m( R$ I3 `% \2 k<center> <ASP:DropDownList AutoPostBack="true" id="Category" OnSelectedIndexChanged="Category_Select" runat="server">' d, z7 g" _2 t+ e; Z
<ASP:ListItem value="信息系">信息系</ASP:ListItem>
! o5 A& |: ]3 v2 u \, J8 H <ASP:ListItem value="工程系">工程系</ASP:ListItem>
5 l2 w/ {+ W3 \( A <ASP:ListItem value="英语系">英语系</ASP:ListItem># W D. J) a5 E5 a; E% N( p
</ASP:DropDownList></center>
% E7 ^" \! E3 f; i
$ [& ^! E4 Y* R z3 R: N</td>2 R9 {3 W- m9 A/ K \
</tr>9 X* y! {: S6 R1 \
</table>) _0 R1 }: h% V4 q1 C
<ASP:DataList id="MyDataList" BorderWidth="0" RepeatColumns="2" runat="server">, M7 H2 z) ]8 }
<template name="itemtemplate">7 R; }3 H: Q" I6 U% K2 }
<table cellpadding=10 style="font: 10pt verdana">8 ~+ M. i7 e' c% N2 V! c9 A
<tr>! H- l! L8 H ~1 j. N# n f
<td valign="top">0 s$ [* w/ x* c7 {) e& D
<b>所在系: </b><%# DataBinder.Eval(Container.DataItem, "dept") %><br>5 R6 R& O# w) U! L @1 d
<b>姓名: </b><%# DataBinder.Eval(Container.DataItem, "name") %><br>
0 t* }" Y- u# r! v2 X" n$ R <b>性别: </b><%# DataBinder.Eval(Container.DataItem, "sex") %><br>4 l* T8 [3 ]& Y( `. A: k5 R& \
<b>年级: </b><%# DataBinder.Eval(Container.DataItem, "grade") %>% p+ w% a' Z/ N3 A E [
</td>: @) B/ x* j, k6 F# C9 V0 O
</tr>
; n5 e% P6 D: K ^( F+ o- i: m5 `$ ]+ k</center> & N' u3 Q1 b; e3 x$ R
</table># P) b/ b7 u$ A3 Y9 P/ C& r3 m8 b
</template>
, `1 J5 M) p" s</ASP:DataList>, }* i6 L' I, y
运行的效果图如下:
! B% u" N5 P0 k: ~( ~这样,一个完整的例子就做好了!实现了代码和模板的分离。试一下吧!
3 _2 H4 c/ z- p7 V; N2.3.3 自定义控件
, C8 m7 ^# v1 K6 ~! R6 _( [* ]在asp.net中,除了我们应用的服务端控件之外,我们还可以创建自己的服务端控件,这样的控件叫Pagelet。我们来介绍如何创建一个Pagelet,这个Pagelet的功能是在被访问时返回一个消息。
l2 T3 g+ V0 k3 ^我们创建一个Pagelet,用来返回一个消息在客户端的浏览器上:0 Y& r' ^+ C: [- F4 x/ ~
Welcome.ascx:8 s. D/ t( p& z$ ~6 w( J# x
<!--源文件:form\CustomControl\welcome.ascx-->
: ^$ u" y; [+ S9 [- f/ F' S$ h/ W欢迎来到我这里啊!!!% ~& U5 c7 C& G: C3 W
就这么简单,当然你也可以让它复杂一点。当一个Pagelet被创建后,我们就可以通过下面的记录指示来调用它:. g) W+ X- I; ^& g2 T0 W
<% @ Register TagPrefix="wmessage" TagName="wname" Src="Welcome.ascx" %>) Y) l% \; c# z! X4 `- _- g3 _; x) N
TagPrefix为Pagelet指定一个唯一的名字空间,TagName是Pagelet的唯一名字,当然你也可以换成其他的不是”wname“的名称如:TagName="saidy"。Src属性是指指向Pagelet的虚拟路径。
0 H" X9 {" d% e$ z. _一旦我们注册了Pagelet,我们就可以向用普通的空件一样来应用它:/ ?- g9 y+ R/ ~) P; p
<wmessage:wname runat="server"/>2 Z* L8 ? q+ _" w3 G0 c! \
下面的例子示范了自定义的控件的应用(welcome.aspx):
; W/ g0 }; A5 w$ h<!--源文件:form\CustomControl\welcome.aspx-->
' ^6 l; A! U# M1 q$ u, u' u9 ]<%@ Register TagPrefix="wmessage" TagName="wname" Src="Welcome.ascx" %>( B* g% ? @3 z9 P( n h0 ?- Y
<html>
% R1 w% n3 O% y( _8 N6 c9 B<title>自定义的控件</title>
3 U. p, _4 ?9 K+ {) ^<h3>.NET->Pagelet</h3>
9 v9 [! s( K' q' d<wmessage:wname runat="server"/>/ U+ W( Y K/ s$ C
</body>7 g! X1 k5 I1 Z) G" }
</html> S9 R5 S8 i2 l- x |3 j
客户端的访问如下:% d- {4 T! }7 W* C5 m1 _
6 [/ {/ b% d4 |4 q* }/ g2.3.4 组合控件
4 `5 @4 o0 C4 r$ K0 `- S1.定义
. H7 ]8 q! f+ K" B4 a以类组合形式把已有的控件编译后形成自己定制的控件。实际上组合控件在效果上与利用内置控件形成的用户自定义控件一样,不同处在于,用户自定义控件含有一个.ascx的纯文本控制文件,而组合控件则利用编译后的代码。2 f* K5 h3 F/ ~4 R1 o5 H& {! F
2.步骤
6 @: j6 Y& i, J% |$ n; R: p3 W1.)重新定义从Control继承来的CreateChildControls方法。( e( N2 C g- w
2.)如果组合控件要保持于页面上,须 |