OnItemCommand 当在ItemTemplate 中所宣告的Button 或LinkButton 控件触发事件时,如果该控件的CommandName 属性内容不是Edit、Cancel、Delete 或Update 时,便触发本事件。其宣告语法为:
Sub OnItemCommand(Sender As Object, e As DataListCommandEventArgs)
...
End Sub
其中参数e 有2 个属性,如下表所示:
要使用本事件前,首先必须在ItemTemplate 中宣告LinkButton 或Button Web 控件。下列范例在ItemTemplate 中宣告一个LinkButton Web 控件,当使用者按下LinkButton Web 控件后,会显示该项目的详细数据:
<%@Import Namespace=System.Data.ADO%>
<%@Import Namespace=System.Data%>
<!--#Include File="GetTable.inc"-->
<Html>
<Form runat="Server">
<ASP:DataList Id="dlA" OnItemCommand="dlA_ICMD" GrIdLines="both"
Runat="Server">
<Template Name="ItemTemplate">
<ASP:Image ImageUrl="ico1.gif" Runat="Server"/>
姓名: <%#Container.DataItem("UserName")%>
<ASP:LinkButton Id="lbShow" Text=">" Runat="Server"/>
</Template>
<Template Name="SelectedItemTemplate">
<ASP:Image ImageUrl="ico1.gif" Runat="Server"/>
姓名: <%#Container.DataItem("UserName")%>
<ASP:LinkButton Id="lbClose" Text="<" Runat="Server"/><br>
电话: <%#Container.DataItem("UserTel")%><br>
住址: <%#Container.DataItem("UserAdd")%><br>
电邮: <%#Container.DataItem("UserEmail")%><br>
</Template>
</ASP:DataList>
</Form>
<Script Language="VB" Runat="Server">
Sub Page_Load(Sender As Object, e As EventArgs)
Dim dtDataTable As DataTable=GetTable("CH05\MyWeb.mdb", "Members")
dlA.DataSource=dtDataTable.DefaultView
Page.DataBind()
End Sub
Sub dlA_ICMD(Sender As Object, e As DataListCommandEventArgs)
If e.CommandSource.Id="lbShow" Then
dlA.SelectedIndex=e.Item.ItemIndex
ElseIf e.CommandSource.Id="lbClose"
dlA.SelectedIndex=-1
End If
dlA.DataBind()
End Sub
</SCRIPT>
</Html>
上述范例我们定义了ItemTemplate 以及SelectedItemTemplate 这两个样版,并指定DataListWeb 控件的OnItemCommand 属性为dlA_ICMD,表示当Template 中的控件引发事件时,只要引发事件的控件其CommandName 属性值不是Edit、Cancel、Delete 或Update 时,才会触发本事件。不过我们在Template 中的LinkButton 控件并没有指定其CommandName 属性,符合触发OnItemCommand 事件的条件;所以这个范例在触发事件时会执行dlA_ICMD 事件程序。由于DataList 会引发事件,所以DataList 控件必需被放置于<Form> 标注之中。当事件触发时我们就可以透过e.CommandSource 来取得引发事件的控件之参考,并判断其Id 属性。若其Id属性为lbShow,则将DataList Web 控件的SelectedIndex 属性指定为e.Item.ItemIndex,e.Item.ItemIndex 表示被选到项目的Index 值,所以该笔记录就会以SelectedItemTemplate 来显示详细资料;若Id 属性为lbClose,则将DataList Web 控件的SelectedIndex 设为-1,表示没有任何选项被选择。另外DataList 设定SelectedIndex 属性完毕后必须要再呼叫DataBind 方法,让DataList Web 控件重新再以新的设定来显示数据源中的数据。
文章来源于领测软件测试网 https://www.ltesting.net/