asp.net|控制項 利用DataList控制項的<SelectedItemTemplate> 屬性,就可以隨心所欲的布置表中的資料。根據連結,友好地顯示出使用者感興趣的資料,我們來看下面的執行個體。
9.3.2 DataList控制項的選擇輸入功能
在DataCon Web 項目裡添加一個Web Form,命名為DataList_Sample2.aspx,添加一個DataList控制項,DataList_Sample2.aspx的主要HTML代碼如下:
<form id="Form1" method="post" runat="server">
<asp:DataList id="DataList1"
runat="server" RepeatColumns="1"
BorderColor="#000099" CellPadding="0"
BorderWidth="1px" GridLines="Both">
<SelectedItemStyle Font-Size="X-Small"></SelectedItemStyle>
<HeaderTemplate> 學生資訊情況 </HeaderTemplate>
<SelectedItemTemplate>
姓名:<%# DataBinder.Eval(Container.DataItem,"name") %>
(編號:<%# DataBinder.Eval(Container.DataItem,"id") %>)<br>
性別:<%# DataBinder.Eval(Container.DataItem,"sex") %><br>
專業:<%# DataBinder.Eval(Container.DataItem,"major") %><br>
班級:<%# DataBinder.Eval(Container.DataItem,"class") %><br>
住址:<%# DataBinder.Eval(Container.DataItem,"address") %><br>
電話:<%# DataBinder.Eval(Container.DataItem,"tel") %><br>
電郵:<%# DataBinder.Eval(Container.DataItem,"email") %><br>
<asp:LinkButton Runat="server" CommandName="close">關閉</asp:LinkButton>
</SelectedItemTemplate>
<AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
<SeparatorStyle BackColor="#339966"></SeparatorStyle>
<ItemStyle Font-Size="X-Small"></ItemStyle>
<ItemTemplate>
編號:<%# DataBinder.Eval(Container.DataItem,"id") %>
姓名:<%# DataBinder.Eval(Container.DataItem,"name") %>
<asp:LinkButton Runat="server" CommandName="moreinfor" >
詳情</asp:LinkButton>
</ItemTemplate>
<HeaderStyle Font-Names="宋體" Font-Bold="True" BackColor="LightSteelBlue"></HeaderStyle>
</asp:DataList>
</form>
在這個執行個體中的應用中,我們需要注意的是<SelectedItemTemplate>的布局格式和添加控制項的格式使用。當我們點擊DataList控制項中的LinkButton控制項時,辨別是由哪個LinkButton控制項引發的依據是LinkButton控制項的CommandName屬性。DataList控制項中所部署的Button類型的控制項所引發的事件是ItemCommand事件程序,我們要做的就是在這個過程裡添加響應代碼。
下面來看DataList_Sample2.aspx.vb中的邏輯代碼:
'-----code begin----
'省略命名空間的引用
Public Class DataList_Sample2
Inherits System.Web.UI.Page
#Region " Web Form設計器產生的程式碼 "
'此處省略了表單設計器產生的程式碼
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此處放置初始化頁的使用者代碼
getdata()
End Sub
Sub getdata()
Dim mycon As OleDb.OleDbConnection
Try
mycon = New OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath(".") + "\StudentInfor.mdb")
Dim mycmd As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("select * from student", mycon)
Dim dt As Data.DataSet = New Data.DataSet
mycmd.Fill(dt)
DataList1.DataSource = dt.Tables(0).DefaultView
DataList1.DataBind()
Catch ex As Exception
Response.Write("程式出現錯誤,資訊描述如下:<br>" & ex.Message.ToString)
Finally
mycon.Close()
End Try
End Sub
Private Sub DataList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataList1.SelectedIndexChanged
End Sub
Private Sub DataList1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles DataList1.ItemCommand
If e.CommandName = "moreinfor" Then
'當單擊的是[詳情]連結時,顯示詳細資料
DataList1.SelectedIndex = e.Item.ItemIndex
ElseIf e.CommandName = "close" Then
'當單擊的是[關閉]連結時,關閉詳細資料
DataList1.SelectedIndex = -1
End If
getdata()
End Sub
End Class
'-----code end -------
儲存編譯後,效果如圖9.15所示。
圖15
ASP.NET沒有系統DataList控制項的內建分頁功能,但這不代表DataList控制項不支援分頁,我們可以通過DataAdapter.Fill(DataTable,intStartpage,intmaxpages,strDataTablename)來以編程的方式實現DataList的分頁功能。讀者可以參見DataGrid控制項的自訂分頁功能中的有關知識。