天天看點

ASP.NET 2.0 資料綁定--1

ASP.NET 2.0 資料綁定

一、           目标

1. ASP.NET 資料綁定标準控件

2.GridView控件實作資料綁定操作

– GridView 資料格式化輸出

– GirdView 資料分頁與排序

– GirdView 顯示圖檔

– GridView 模闆列

–        GridView 添加、修改、删除資料

二、ASP.NET 中的資料綁定

.資料綁定的工作就是從資料源中把資料傳到控件上

.支援資料綁定的控件都具有以下特性

  具有一個名為DataSource的屬性

  具有一個名為DataBind的方法

.要綁定一個控件,首先需要初始化一個資料源,然後對控件使用DataBind方法

資料綁定流程

ASP.NET 2.0 資料綁定--1

1.資料源

• ASP.NET 1.1使用DataSet作為資料源,建立一個資料源需要使用DataAdapter連接配接資料庫,并通過一個DataCommand來取得查詢結果,存儲到資料源中。

• ASP.NET 2.0提供直接拖拽的控件來實作對資料庫的連接配接與資料源配置。

在大多數情況下,我們需要對資料庫頻繁進行以下操作

  .從資料庫中查詢一些資料

  .從使用者那裡擷取某些輸入,更新至資料庫

  .從資料庫找到某些記錄,删除他們。

這些代碼大部分十分相似,通常我們使用粘貼複制來完成。但是這也經常導緻一個問題,就是我們會忘記修改資料表或者列的名稱,或者對是否是空資料表進行判定。為了避免這樣的錯誤,使用一個封裝的資料庫連接配接對象應該是一個非常好的方案。

• 主要的資料源對象有以下三個

用于通路XML文檔XmlDataSource

用于通路程式員自己編寫的類資料源對象。ObjectDataSource

用于通路所有支援Sql語句的資料庫對象,例如SqlServer.ORACLE,ACCESS等,SqlDataSource

2.支援資料綁定的标準控件

• DropDownList

• ListBox

• CheckBoxList

• RadioButtonList

• BulletedList

三、GridView控件

• 在ASP.NET 1.0時代,DataGrid控件是被廣泛使用的顯示資料庫内容的控件,隻需要拖放DataGrid控件到頁面上,設定少量的屬性,就可以對顯示資料,并進行排序,甚至可以對資料進行編輯。

• 但是即便如此,DataGrid依然有它的局限性。

• 雖然DataGird控件有如此多的屬性,但是其中有些功能,例如資料排序,記錄分頁,修改或者删除記錄功能依然需要編寫一些代碼,而且這些代碼出錯的可能性很大。

1.DataSource:

• DataSource控件用于把資料從資料庫中提取出來,顯示DataSource控件的内容,我們可以使用GridView控件,該控件的一個重要屬性是DataSource id,通過指定該屬性,我們來決定GridView控件顯示那個DataSource控件的内容

連接配接Sql SOURCE示例

2.格式化輸出

• 在顯示資料之後,我們還希望資料在被輸出的時候配合某種格式。

• GridView控件專門提供了用以調整顯示輸出模式的屬性,如果你是一個很有藝術天賦的人,你可以通過修改Back Color,Font,Fore Color等屬性修改顯示模式,或者通過Head Sytle,Row

Style,AlternatingRowStyle,FootSytle屬性來修改單元格格式。如果你和我一樣沒有太多美

感,也沒有關系,你可以通過使用auto format屬性設定顯示模式格式化輸出

• 還可以通過Edit Columns屬性添加或删除顯示元素,也可以修改顯示元素的顯示模式。格式化輸出

• 在元素輸出模式屬性中,可以通過使用FormatString屬性來根據顯示元素的資料類型設定顯示模式,設定方式如{0:c},c表示顯示的是金額。

• 使用SKIN格式化輸出

• 在資料綁定事件發生時,根據使用者的要求自行處理,顯示特殊的輸出效果。

Demo

• 标準的auto format

• 使用skin

• 根據使用者的要求格式化輸出(比如對庫存為0的商品突顯)

3.顯示master/detail資料

• 在資料庫中經常存在一對多的資料關系。是以使用者經常會需要根據某一個條件顯示多條資料記錄。在這個時候,就需要GridView控件能夠和選擇控件相結合,友善的完成任務。

• GridView控件隻需要設定屬性就可完成與選擇控件的綁定。

Demo

• GridView與DropDownList綁定

4.分頁與排序

• 當顯示的資料量過大的時候,一頁也許顯示不下,這個時候我們需要使用一項技術。把龐大的資料分成若幹資料頁面,每個頁面隻顯示一定數量的資料。這種技術被稱為分頁

• 在檢視資料的時候,使用者也許希望按照某列的數值對資料顯示進行排序,例如從高到低顯示考試成績,或者從低到高顯示價格。是以排序技術在資料顯示中也非常重要。

• 分頁與排序技術在ASP.NET 1.x的datagird中也可以實作,隻是需要編寫一些代碼。在GridView中不用寫任何一行代碼,就可以友善的實作分頁和排序技術。

• 分頁可以通過設定Enable Paging和屬性中的paging屬性來進行配置

• 排序可以通過使用Enable Sorting和單元屬性中的sortexpression屬性來設定。

• 分頁Demo

• 排序Demo

• 分頁并排序Demo

5.顯示圖檔

• 在GridView中可以很友善的在某一列顯示圖檔。

• 首先添加一個ImageField屬性列,并指定該屬性列為的資料綁定對象,就可以友善的顯示圖檔

• 顯示圖檔列示例

6.使用TemplateFields

• GridView允許各種不同類型的單元格,比如我們已經示範過的BoundFileds,ImageFields。我們還可以在單元格中輸出自己需要的HTML或者使用ASP.NET Server端的控件

• 例如我我們希望對NorthWind中的HireDate列進行判斷,日期超過一定天數的員工,我們顯示不同的内容。

• 針對上面的需求,我們可以編寫如下函數來完成該功能。

    string ComputeSeniorityLevel(TimeSpan ts)

     {

        int numberOfDaysOnTheJob = ts.Days;

        if( numberOfDaysOnTheJob >= 0 && numberOfDaysOnTheJob <= 1000)

            return "Newbie";

        else if(numberOfDaysOnTheJob > 1000 && numberOfDaysOnTheJob <=4000)

            return "Associate";

        else if(numberOfDaysOnTheJob >= 4000 && numberOfDaysOnTheJob <=8000)

            return "One of the Regulars";

        else

           return "An Ol' Fogey";

     }

• 同時,使用<%#ComputeSeniorityLevel(DateTime.Now - CType(Eval(“HireDate”),

DateTime))%>做資料綁定

使用TemplateFields---2

• TemplateField不但可以作為HTML輸出的容器,也可以作為一個ASP.NET Server控

件的容器。

• 例如在顯示一個資料庫内容的時候需要顯示一個一對多的關系,我們希望在同一列

中顯示多列内容,就需要使用BulletedList控件

• 在TemplateFields中使用BulletedList示例

 DataView territoryData;     // this DataView will hold all of the Territories, loaded at Page_Load

    protected void Page_Load(object sender, EventArgs e)

    {

        //Load all of the territories into a DataView from the SqlDataSource

        territoryData = (DataView)territoriesDataSource.Select(DataSourceSelectArguments.Empty);

    }

    void employeesGridView_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        // For each DataRow in the GridView, programmatically access the BulletedList, filter

        //the DataView based on the GridView row's EmployeeID value and bind the filtered DataView

        //to the BulletedList

        if (e.Row.RowType = DataControlRowType.DataRow)

        {

            BulletedList bl = (BulletedList)e.Row.FindControl("bltTerritories");

            territoryData.RowFilter = "EmployeeID = " + ((DataRowView)e.Row.DataItem)["EmployeeID"].ToString();

            bl.DataSource = territoryData;

            bl.DataBind();

        }

    }

7.顯示細節資料

• 在一對多的表關系中,我們會希望能夠通過單擊一條記錄顯示更多的資訊。或者是有表中太多列,我們之希望顯示一些基本資訊和我們選擇列的全部資訊,這個時候我們需要一個Drilling-down的關聯表格。

• 例如Northwind資料庫中包括一個Order和一個Order Details表,其中Order包含

Demo

• 顯示Order和Order Details

• 在上面的例子中,如果左側的資料表格翻頁,右側的細節表格并不會改變。這樣可能會看起來有點不舒服。通過

void OrderGridView_PageIndexChanged(object sender, EventArgs e)

{

    OrderGridView.SelectedIndex = -1;

}

• 對頁面變更進行如下追蹤,可以解決以上問題。

Demo

• 使用Pageindexchanged事件

8.對頁面資料求和

• 如同剛才的例子中所顯示的,我們還可能對頁面的顯示的資料進行計算,例如我們希望對所有訂單的總價進行求和,并顯示在最下面。• 通過DataBinder.Eval方法我們可以獲得DataRow中的資料,并對其求和即可。

Demo

• 頁面資料求和示例

    decimal priceTotal  = 0;

    int  quantityTotal = 0;

    void detailsGridView_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        if (e.Row.RowType == DataControlRowType.DataRow)

        {

            // add the UnitPrice and QuantityTotal to the running total variables

            priceTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "UnitPrice"));

            quantityTotal += Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "Quantity"));

        }

        else if (e.Row.RowType == DataControlRowType.Footer)

        {

            e.Row.Cells(0).Text = "Totals:";

            //for the Footer, display the running totals

            e.Row.Cells(1).Text = priceTotal.ToString("c");

            e.Row.Cells(2).Text = quantityTotal.ToString("d");

            e.Row.Cells(1).HorizontalAlign = HorizontalAlign.Right;

            e.Row.Cells(2).HorizontalAlign = HorizontalAlign.Right;

            e.Row.Font.Bold = True;

        }

    }

9.編輯、删除資料的方法

• 通過在Sql DataSource中設定屬性,可以完成編輯、删除操作的資料綁定

編輯、删除資料的方法

• 向導第一個CheckBox被選中之後就會自動生成添加、修改、删除資料記錄的代碼,第二

個資料CheckBox一旦被選中,就需要確定資料庫自資料庫中取出之後都沒有被更改

過。

• 同時需要注意,一旦你希望通過GridView編輯、删除資料,那麼在Sql DataSource查詢的資料列中必須要有主鍵存在

• 在資料源配置好隻有,隻需要選擇好Enable Update,Enable Deleting,即可編輯、删除資料