資料繫結的方式:
使用資料繫結文法,可以將控制項屬性值綁定到資料,並指定值以對資料進行檢索、更新、刪除和插入操作。
資料繫結運算式包含在<%#和%>分隔字元之內,可以配合使用Eval、Bind和XPath函數。
Eval函數用於定義單向(唯讀)綁定。
Bind函數用於定義雙向(可更新)綁定。
除了通過在資料繫結運算式中調用Eval和Bind方法執行資料繫結外,還可以調用<%#和%>分隔字元之內的任何公用範圍代碼,以在頁面處理過程中執行該代碼並返回一個值。
(1)GridView控制項:
GridView的Columns集合可添加對象包括:
BoundField、CheckBoxField、ImageField、HyperLinkField、CommandField、ButtonField、emplateField。
我們可以直接通過 Gridview1.DataSource = dt; Gridview1.DataBind();綁定資料。
GridView的排序與分頁:
若要在GridView中啟用排序UI,選中智能標記菜單中的“啟用排序”,或者在HTML代碼將AllowSorting屬性設定為true。
設定欄欄位與GridView控制項的SortExpression 屬性關聯,也即SortExpression被設定為與GridView的某列關聯的單個欄位名稱。
GridView控制項還通過選中智能標記中的“啟用分頁”,或者在HTML代碼中將AllowPaging屬性設定為true。
GridView能夠對從資料來源返回的任何支援ICollectio在設定分頁後,還可以通過屬性視窗
設定GridView控制項的PageSize(每頁顯示大小)
可以設定PagerStyle中的HorizontalAlign為Center來使頁碼標籤顯示在腳註的中間
通過分別配置PagerStyle和PagerSettings屬性,還可以自訂頁導航的樣式和設定。
PagerStyle確定頁導航的外觀和風格,而PagerSettings確定要使用的分頁類型(數字或“Next/Previous”(下一頁/上一頁)按鈕)、頁導航位置和相關選項。
n介面的值自動進行分頁 。
當然我們最後還要通過PageIndexChanging事件去觸發。
protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
Gridview1.PageIndex = e.NewPageIndex;
//Gridview1.DataBind();
MyBind();
}
下面是aspx頁面的代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="AddMessage.aspx">添加留言</a>
<asp:gridview ID="Gridview1" runat="server" AutoGenerateColumns="False"
onrowcancelingedit="Gridview1_RowCancelingEdit"
onrowdeleting="Gridview1_RowDeleting" onrowediting="Gridview1_RowEditing"
onrowupdating="Gridview1_RowUpdating" AllowPaging="True"
onpageindexchanging="Gridview1_PageIndexChanging"
onselectedindexchanging="Gridview1_SelectedIndexChanging" PageSize="2">
<Columns>
<asp:TemplateField HeaderText="編號">
<EditItemTemplate>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("messageid") %>' />
</EditItemTemplate>
<ItemTemplate>
<%#Eval("messageid") %>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("messageid") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="標題">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("mtitle") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<%#Eval("mtitle") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="留言內容">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("mcontent") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<%#Eval("mcontent") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="留言時間">
<EditItemTemplate>
<%-- <asp:TextBox ID="TextBox3" runat="server" Text='<%#Eval("mtime") %>'></asp:TextBox>--%>
</EditItemTemplate>
<ItemTemplate>
<%#Eval("mtime") %>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText="編輯" ShowEditButton="True" />
<asp:CommandField HeaderText="刪除" ShowDeleteButton="True" />
</Columns>
</asp:gridview>
</div>
</form>
</body>
</html>
下面是GridView控制項的編輯和刪除代碼:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
MyBind();
}
}
public void MyBind()
{
Message mess = new Message();
OpMessage op = new OpMessage();
DataTable dt = op.Select();
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
protected void Gridview1_RowEditing(object sender, GridViewEditEventArgs e)
{
Gridview1.EditIndex = e.NewEditIndex;
MyBind();
}
protected void Gridview1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox t1 = Gridview1.Rows[e.RowIndex].FindControl("Textbox1") as TextBox;
TextBox t2 = Gridview1.Rows[e.RowIndex].FindControl("Textbox2") as TextBox;
//TextBox t3 = Gridview1.Rows[e.RowIndex].FindControl("Textbox3") as TextBox;
HiddenField h1 = Gridview1.Rows[e.RowIndex].FindControl("HiddenField1") as HiddenField;
Message me = new Message();
OpMessage opm = new OpMessage();
me.Title = t1.Text;
me.Content = t2.Text;
me.Time = DateTime.Now;
opm.GetData(me);
opm.Update(int.Parse(h1.Value));
Gridview1.EditIndex = -1;
MyBind();
}
protected void Gridview1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
OpMessage opm = new OpMessage();
HiddenField h1 = Gridview1.Rows[e.RowIndex].FindControl("HiddenField1") as HiddenField;
opm.Delete(int.Parse(h1.Value));
MyBind();
}
protected void Gridview1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
Gridview1.EditIndex = -1;
MyBind();
}
protected void Gridview1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
Gridview1.PageIndex = e.NewSelectedIndex;
//Gridview1.DataBind();
MyBind();
}
protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
Gridview1.PageIndex = e.NewPageIndex;
//Gridview1.DataBind();
MyBind();
}
}
(2) Datalist控制項:
DataList控制項支援的模板類型
模板屬性 說明
ItemTemplate 可包含一些HTML元素和控制項,將為資料來源中的每一行呈現一次這些HTML元素和控制項。
AlternatingItemTemplate 可包含一些HTML元素和控制項,將為資料來源中的每兩行呈現一次這些 HTML元素和控制項。通常,開發人員可以使用此模板來為交替行建立不同的外觀,例如指定一個與在ItemTemplate屬性中指定的顏色不同的背景色。
SelectedItemTemplate 可包含一些元素,當使用者選擇DataList控制項中的某一項時將呈現這些元素。通常,開發人員可以使用此模板來通過不同的背景色或字型顏色直觀地區分選定的行。還可以通過顯示資料來源中的其他欄位來展開該項。
EditItemTemplate 指定當某項處於編輯模式中時的布局。此模板通常包含一些編輯控制項,如TextBox控制項。
HeaderTemplate 和FooterTemplate 包含在列表的開始和結束處分別呈現的文本和控制項。
SeparatorTemplate 包含在每項之間呈現的元素。典型的樣本可能是一條直線(使用HR元素)。
響應清單項目中的按鈕單擊而引發。這些事件旨在協助開發人員響應DataList控制項的最常用功能。支援該類型的四個事件:
? EditCommand
? DeleteCommand
? UpdateCommand
? CancelCommand
若要引發這些事件,可將Button、LinkButton或ImageButton控制項添加到DataList控制項中的模板中,並將這些按鈕的CommandName屬性設定為某個關鍵字,如edit、delete、update或cancel。當使用者單擊項中的某個按鈕時,就會向該按鈕的容器(DataList控制項)發送事件。按鈕具體引發哪個事件將取決於所單擊按鈕的CommandName屬性的值。例如,如果某個按鈕的CommandName屬性設定為edit,則單擊該按鈕時將引發EditCommand事件。如果CommandName屬性設定為delete,則單擊該按鈕將引發DeleteCommand事件,依此類推。
aspx頁面代碼:
<form id="form1" runat="server">
<div>
<asp:DataList ID="DataList1" runat="server" RepeatColumns="2"
oncancelcommand="DataList1_CancelCommand" oneditcommand="DataList1_EditCommand"
onitemcommand="DataList1_ItemCommand"
onupdatecommand="DataList1_UpdateCommand"
ondeletecommand="DataList1_DeleteCommand">
<ItemTemplate>
<table><tr><td><%#Eval("mtitle") %>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("messageid") %>'></asp:HiddenField>
<asp:Button ID="Button2" runat="server" Text="編輯" CommandName="edit" />
<asp:Button ID="Button4" runat="server" Text="刪除" CommandName="delete" />
</td></tr>
<td><%#Eval("mcontent") %></td>
<td><%#Eval("mtime") %></td>
</table>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("mtitle") %>'></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("mcontent") %>'></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="更新" CommandName="update" CommandArgument=""/>
<asp:Button ID="Button3" runat="server" Text="取消" CommandName="cancel"/>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("messageid") %>'>
</asp:HiddenField>
</EditItemTemplate>
<SelectedItemTemplate>
</SelectedItemTemplate>
</asp:DataList>
</div>
</form>
(3)Repeater控制項:
Repeater伺服器控制項類似於DataList伺服器控制項,通過建立模板為Repeater伺服器控制項提供布局。
如果未定義模板,或者如果模板都不包含元素,則該控制項不會顯示在頁面上。
Repeater伺服器控制項能夠支援的模板有ItemTemplate、AlternatingItemTemplate、HeaderTemplate、FooterTemplate、SeparatorTemplate。
Repeater控制項的使用類似於DataList控制項。Repeater控制項由於布局由自己定義 所以一般會在網站的前台使用。而GridView控制項則方便資料庫的管理,用於後台資料的呈現常在後台頁面使用。
(4)DetailsView控制項:
DetailsView控制項一次呈現一條表格形式的記錄,並提供翻閱多條記錄以及插入、更新、和刪除記錄的功能。它常用在主/詳細資料方案中。如主控制項GridView
(5)FormView控制項:
FormView控制項與DetailsView控制項類似,它一次呈現資料來源中的一條記錄,並並提供翻閱多條記錄以及插入、更新、和刪除記錄的功能。這兩個控制項都不常用。