ASP.NET 2.0 資料繫結–1

來源:互聯網
上載者:User

ASP.NET 2.0 資料繫結

 

一、           目標

1 ASP.NET 資料繫結標準控制項

 

2GridView控制項實現資料繫結操作

– GridView 資料格式化輸出

– GirdView 資料分頁與排序

– GirdView 顯示圖片

– GridView 模板列

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

 

二、ASP.NET 中的資料繫結

.資料繫結的工作就是從資料來源中把資料傳到控制項上

.支援資料繫結的控制項都具有以下特性

  具有一個名為DataSource的屬性

  具有一個名為DataBind的方法

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

資料繫結流程

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控制項有如此多的屬性,但是其中有些功能,例如資料排序,記錄分頁,修改或者刪除記錄功能依然需要編寫一些代碼,而且這些代碼出錯的可能性很大。

 

1DataSource:

• 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,即可編輯、刪除資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.