top
Loading...
ASP.NET2.0中Gridview控件高級技巧

二 gridview的分頁和排序

在asp.net 1.1中,datagrid分頁是很常見的。而在asp.net 2.0中,依然有兩種分頁方式,一種是默認的分頁方式,比如,有1000條數據,每頁顯示10條數據,則每次頁面請求都必須從數據庫中將1000條數據讀取出來,只不過每次顯示一頁時,顯示10條數據,速度和性能會降低。另一種是自定義分頁方式,比如1000條數據,每頁顯示10條數據,則程序每次在頁面跳轉時,只會從數據庫中拿10條數據出來顯示給用戶,而不是每次都把1000條數據拿出來,因此性能大為提高。

在asp.net 2.0中,使用sqldatasource控件進行分頁是十分容易的事情。Sqldatasource數據源控件是用來與數據庫打交道的,可以讀取數據庫中的數據,并可以和gridview等控件進行綁定。在下面的演示中,首先拖拉一個sqldatasource控件,并且設置其數據源為sql server 中的northwind數據庫,再拖拉一個gridview控件,并且點gridview的smart tag智能標記,在彈出的菜單中,選擇"enable paging"和"enable sorting",即允許分頁和排序,則可以完成分頁和排序的功能了,是不是很簡單呢?如下圖所示:


而在分頁的效果中,有時我們想讓用戶知道,目前正在瀏覽的是第幾頁,那么要如何實現呢?在gridview中,有一個pageindex的屬性,指示頁面的序號(從0開始),則只需在頁面的html代碼內,寫下如下代碼,即可實現效果:

<i>You are viewing page
<%=productsGridView.PageIndex + 1%>
of
<%=productsGridView.PageCount%>
</i>

完整代碼如下:

<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="productDataSource" Runat="server"
SelectCommand="SELECT [ProductName], [UnitPrice],
[UnitsInStock], [QuantityPerUnit] FROM [Products]"
ConnectionString="<%$ ConnectionStrings:NWConnectionString %>">
</asp:SqlDataSource>
<asp:GridView ID=" productsGridView" Runat="server"
DataSourceID="productDataSource" AutoGenerateColumns="False"
AllowSorting="True" BorderWidth="2px" BackColor="White" GridLines="None" CellPadding="3"
CellSpacing="1" BorderStyle="Ridge" BorderColor="White" AllowPaging="True">
<FooterStyle ForeColor="Black" BackColor="#C6C3C6"></FooterStyle>
<PagerStyle ForeColor="Black" HorizontalAlign="Right" BackColor="#C6C3C6"></PagerStyle>
<HeaderStyle ForeColor="#E7E7FF" Font-Bold="True" BackColor="#4A3C8C"></HeaderStyle>
<Columns>
<asp:BoundField HeaderText="Product" DataField="ProductName" SortExpression="ProductName">
</asp:BoundField>
<asp:BoundField HeaderText="Unit Price" DataField="UnitPrice" SortExpression="UnitPrice"
DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="Right"></ItemStyle>
</asp:BoundField>
<asp:BoundField HeaderText="Units In Stock" DataField="UnitsInStock"
SortExpression="UnitsInStock" DataFormatString="{0:d}">
<ItemStyle HorizontalAlign="Right"></ItemStyle>
</asp:BoundField>
<asp:BoundField HeaderText="Quantity Per Unit" DataField="QuantityPerUnit"></asp:BoundField>
</Columns>
<SelectedRowStyle ForeColor="White" Font-Bold="True" BackColor="#9471DE"></SelectedRowStyle>
<RowStyle ForeColor="Black" BackColor="#DEDFDE"></RowStyle>
</asp:GridView>
<i>You are viewing page
<%=productsGridView.PageIndex + 1%>
of
<%=productsGridView.PageCount%>
</i>
</div>
</form>

實現的效果如下圖所示:


注意的是,可以點擊gridview中各字段的名稱,如product,unit price,等進行排序,十分方便。如果要對分頁時每頁顯示多少條數據進行顯示,則只需要設置gridview的pagesize屬性就可以了。

三 在gridview中使用圖片

在asp.net 1.1中,如果要使用圖片的話,需要設置templatecolumn模版列。而在asp.ne 2.0中,則提供了imagefield列可以顯示gridview中的圖片。下面,我們設計一個簡單的相冊列表,讓大家了解如何在gridview中使用圖片,其中,數據表的結果如下,并且已經假設用戶已經上傳了相片,因此著重討論如何在gridview中顯示圖片

· PictureID-圖片的序號,自動遞增.

· Title-圖片的標題

· DateAdded-圖片上傳日期

· PictureUrl-圖片上傳后的相對路徑

接下來,我們拖拉一個gridview到IDE環境中去,設置將其與sqldatasource綁定。由于我們要在gridview中顯示的是實際的圖片,因此我們首先選gridview的smart tag標記,在彈出的菜單中選擇"edit columns",之后將pictureurl綁定字段移除,添加一個ImageField綁定字段,并且將ImageField字段的dataimageurlfield屬性設置為PictureURL字段,用來顯示圖片的路徑,如下圖所示:


下面是相關HTML部分的代碼:

<asp:GridView ID="GridView1" Runat="server"
DataSource=’<%# GetData() %>’ AutoGenerateColumns="False"
BorderWidth="1px" BackColor="White" CellPadding="3" BorderStyle="None"
BorderColor="#CCCCCC" Font-Names="Arial">
<FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle>
<PagerStyle ForeColor="#000066" HorizontalAlign="Left"
BackColor="White"></PagerStyle>
<HeaderStyle ForeColor="White" Font-Bold="True"
BackColor="#006699"></HeaderStyle>
<Columns>
<asp:BoundField HeaderText="Picutre ID" DataField="PictureID">
<ItemStyle HorizontalAlign="Center"
VerticalAlign="Middle"></ItemStyle>
</asp:BoundField>
<asp:BoundField HeaderText="Title" DataField="Title"></asp:BoundField>
<asp:BoundField HeaderText="Date Added" DataField="DateAdded"
DataFormatString="{0:d}">
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:ImageField DataImageUrlField="PictureURL"></asp:ImageField>
</Columns>
<SelectedRowStyle ForeColor="White" Font-Bold="True"
BackColor="#669999"></SelectedRowStyle>
<RowStyle ForeColor="#000066"></RowStyle>
</asp:GridView>

我們并且通過手動編寫代碼的方式,創建數據表,如下代碼所示:

DataTable GetData()
{
// This method creates a DataTable with four rows. Each row has the
// following schema:
// PictureID int
// PictureURL string
// Title string
// DateAdded datetime
DataTable dt = new DataTable();
// define the table’s schema
dt.Columns.Add(new DataColumn("PictureID", typeof(int)));
dt.Columns.Add(new DataColumn("PictureURL", typeof(string)));
dt.Columns.Add(new DataColumn("Title", typeof(string)));
dt.Columns.Add(new DataColumn("DateAdded", typeof(DateTime)));
// Create the four records
DataRow dr = dt.NewRow();
dr["PictureID"] = 1;
dr["PictureURL"] = ResolveUrl("'/DisplayingImages/Images/Blue hills.jpg");
dr["Title"] = "Blue Hills";
dr["DateAdded"] = new DateTime(2005, 1, 15);
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["PictureID"] = 2;
dr["PictureURL"] = ResolveUrl("'/DisplayingImages/Images/Sunset.jpg");
dr["Title"] = "Sunset";
dr["DateAdded"] = new DateTime(2005, 1, 21);
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["PictureID"] = 3;
dr["PictureURL"] =
ResolveUrl("'/DisplayingImages/Images/Water lilies.jpg");
dr["Title"] = "Water Lilies";
dr["DateAdded"] = new DateTime(2005, 2, 1);
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["PictureID"] = 4;
dr["PictureURL"] = ResolveUrl("'/DisplayingImages/Images/Winter.jpg");
dr["Title"] = "Winter";
dr["DateAdded"] = new DateTime(2005, 2, 18);
dt.Rows.Add(dr);
return dt;
}

程序運行后,結果如下圖所示




作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗