天天看點

ASP.NET 2.0中Gridview控件進階技巧

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的話,将所在行的北京顔色設定為黃色。

ASP.NET 2.0中Gridview控件進階技巧

程式代碼 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代碼内,寫下如下代碼,即可實作效果:

ASP.NET 2.0中Gridview控件進階技巧

程式代碼 <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.NET 2.0中Gridview控件進階技巧

程式代碼 <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>

  我們并且通過手動編寫代碼的方式,建立資料表,如下代碼所示:

ASP.NET 2.0中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;

}

  程式運作後,結果如下圖所示

ASP.NET 2.0中Gridview控件進階技巧

四 利用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

ASP.NET 2.0中Gridview控件進階技巧

引用通告位址: http://www.ad0.cn/netfetch/trackback.asp?tbID=304