8).數據訪問的定制
除了DataGrid之外,還有DataList和Repeater,可以更加靈活使用,不過你需要提供模板,
用控件templates
他們也有屬性DataSource,可以賦予一個ICollection對象,ItemTemplate控件指定每一個記錄
顯示的樣子,例:
<ASP:Repeater id="MyRepeater" runat="server">
<template name="itemtemplate">
<%# DataBinder.Eval(Container.DataItem,"name")%>
</template>
</ASP:Repeater>
其中:Container表示控件之外的第一個含System.Web.UI.INamingContainer的控件,本例中
是一個System.Web.UI.WebControls,RepeaterItem,包含了一個DataItem的屬性。
另外,還可以使用HeaderTemplate和FooterTemplate。
DataList有更強的控制能力,比如他的RepeaterCoumns屬性可指定一行重復幾次,RepeatDirection
指定方向。
插入LinkButton控件可以引起select事件,DataList中可設OnSelectedIndExchanged屬性指定事件Handler.
例:
<ASP:DataList id="dl" OnSelectedIndExchanged="dl_Select">
<ASP:LinkButton Command="select" runat="server">
<%#DataBinder.Eval(Container.DataItem."title")%>
</ASP:LinkButton>
......
<script language="c#" runat="server">
void dl_Select(Object sencer,EventArgs E){
......
}
</script>
注意,可能有多個事件,比如Edit/Update/Cancel,所以可以用一個統一的OnItemCommand來處理,
憑Command判斷到底是什麼事件。例:
void dl_select(Object src,DataListCommandEventArgs E){
String command=((LinkButton)E.CommandSource).Text;
switch(command)
{case "discuss":.....break;
case "ratings":......break;
}
}
<ASP:LinkButton Command="ratings" runat="server">
VIEw ratings
</ASP:LinkButton>
更妙的是,DataList還可以支持Edit和Select模板!!
例:
void MyDataList_Edit(Object sender,DataListCommandEventArgs E){
MydataList.EditItemIndex = (int)E.Item,ItemIndex;
//設定誰被選中進行編輯
......//重新幫定
}
void MyDataList_Update(Object sender,DataListCommandEventArgs E){
String PRice = ((HtmlInputText)E.Item.FindControl("edit_price")).Value;
......
MyDataList.EditItemIndex=-1;
}
......
<template name="edititemtemplate">
......
<b>Price:</b><input id="edit_price" type="text">
.
.
.
這可以很方便地用在系統後台維護上。
問題,上例中模板中的控件剛好只有一個,所以FindControls起作用了,但如果有多個呢?
可以通過DataList的Items集合來遍歷,如:
for(int i=0;i<MyDataList.Items.count;i++)
String isChecked = ((CheckBox)MyDataList.Items[i].FindControls("save")).checked.ToString();
<template name="itemtemplate">
<ASP:checkbox id="save" runat=server>
</template>
9).商業控件
。應用的bin目錄
在ASP中的組件需要用regsvr32注冊,不方便遠程管理,ASP+中只需要放到應用的/bin目錄下即可。
<%Import NameSpace="helloworld"%>引入名稱空間,config文件來指定使用哪些控件,例:
<configuration>
<compilation>
<assemblIEs>
<add assembly="System.Data"/>
<add assembly="System.Web.Services"/>
<add assembly="System.Drawing"/>
<add assembly="*" />
</assemblIEs>
</compilation>
</configuration>
其中,前三個是全局的,最後一個是管bin目錄下的。
10).寫控件
略。
注意需要從Controls派生(System.Web.UI.Controls)
11).WebForms控件參考
兩大類,
一是System.Web.UI.HtmlControls,以Html打頭,多為Web頁面上顯示的。
二是System.Web.UI.WebControls,附加的,如DataGrid等。
具體略。
12).WebForms表達式參考
<%%>代碼塊,<%=%>也支持的。
<script runat="server">
服務器控件用:<ASP:Lable .....runat="server">
Html服務器控件用: <span id="Message" runat="server">
數據幫定:<%# %>
對象:<object runat="server">,如:
<object id="items" class="System.collections.ArrayList" runat="server">
服務器端注釋:<%-- comment --%>
服務器端包含:<--#include file="..." -->