ASP.NET 2.0中Gridview控件進階技巧
ASP.NET 2.0中,新增加的gridview控件的确十分強大,彌補了在asp.net 1.1中,使用datagrid控件時的不足之處。因為在asp.net 1.1中,在使用datagrid時,很多情況下依然要編寫大量的代碼,十分不友善,而且有時需要很多技巧。而在asp.net 2.0中,很多情況下,使用gridview控件的話,甚至隻需要拖拉控件,設定屬性就可以了,不需要編寫任何代碼。在《使用ASP.NET 2.0中的GridView控件》和《ASP.NET 2.0中的DataSource控件》中,已經對gridview控件做了一系列介紹,如果之前沒有了解過gridview的讀者,請先閱讀這兩篇文章。在本文中,将繼續深入介紹gridview的一些使用技巧。
一 格式化gridview
和asp.net 1.1一樣,gridview可以很友善地定制其樣式,比如css,顔色等。要定制gridview的格式,十分簡單,隻需要滑鼠右擊gridview,在彈出的菜單中選擇"AUTO FORMAT",則可以選擇gridview的樣式,内置了許多樣式。
如果你要對gridview中每一列自定義格式,則隻需要點選gridview右上角的"smart tag"智能标記,在彈出的菜單中,選擇"edit columns",會彈出如下圖的窗體, 這樣就可以對每列進行詳細的設定了。
比如,如果要某一列設定為特殊格式,如要将unitprice設定為貨币格式,可以在unitprice列的DataFormatString屬性中設定為{0:C}。 <script type="text/javascript">google_ad_client = "pub-4475724770859924";google_alternate_color = "FFBBE8";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "text_image";google_ad_channel ="9379930647";google_color_border = "F0F0F0";google_color_bg = "FFFFFF";google_color_link = "FF6FCF";google_color_url = "38B63C";google_color_text = "B3B3B3";</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
而有的時候,我們可能要根據需要,對gridview中的資料進行特殊的顯示,比如當某樣商品庫存為0時,要求gridview中以不同顔色進行顯示,這時,可以按如下的方法進行:
首先,gridview提供了rowdatabound事件,該事件在gridview中每行被建立并且綁定到datasource控件後被觸發,是以,我們可以利用該事件去檢查庫存是否為0,如果為0的話,将所在行的北京顔色設定為黃色。

程式代碼 public void productsGridView_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int unitsInStock = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "UnitsInStock"));
if (unitsInStock == 0)
e.Row.BackColor = Color.Yellow;
}
}
首先,該事件首先檢查,目前的行是否屬于datarow類型的行,因為象gridview中的headerrow,footerrow等行,并不包含實際的資料,是以,我們不需要使用headerrow和footerrow,而為了取得庫存unitesinstock的内容,通過使用databinder.eval的方法取出其内容,并轉換為int類型,接着判斷是否為0,如果為0的話,則設定其行的背景顔色為黃色.
二 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>
注意的是,可以點選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;
}
程式運作後,結果如下圖所示
四 利用Gridview實作主從關系
使用gridview實作一個master-detail主從關系的應用,以實作一對多的關系,因為這是十分普遍的web應用。可以使用DetailsView 控件配合GridView 顯示master-detail 視圖。
具體參見本站 ASP.NET 2.0 資料綁定進階技巧
閱讀更多 Asp.Net 2.0, ADO.NET 2.0,VS 2005 ,SQL Server 2005相關文章:
C#操作ACCESS資料庫(建立,壓縮,備份,恢複)
OleDbDataReader 類相關
DataReader與BLOB值(VS 2005+SQL 2005)
TreeView 控件與Vs 2005(Asp.Net 2.0)
ASP.NET 2.0+SQL Server 2005建構多層應用
Ado.Net詳細研究(DataReader 為主)
Asp.net 1.0更新至ASP.NET 2.0十個問題總結
VS2005常用插件搜羅(開發效率提高)
棄用DataGrid,使用GridView結合DetailsView
ASP.NET 2.0的ObjectDataSource控件
Asp.Net與Crystal Report(水晶報表)
ASP.NET Development Server的系列問題詳解(Ad0.Cn原創)
ADO.NET的新增功能
ASP.NET 資料通路類
深入ADO.NET 2.0的DataSet對象
ADO.NET中使用DataSet類
Visual Studio 2005中DataSet新特性
詳細研究Asp.Net中的DataReader
Asp.Net中使用DataReader對象
ASP.NET應用程式中調用EJB
引用通告位址: http://www.ad0.cn/netfetch/trackback.asp?tbID=304