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; } |
程序運行后,結果如下圖所示
![]() |



