一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


介紹

我們可以通過控制HeaderStyle, RowStyle, AlternatingRowStyle和其他一些屬性來改變GridView, DetailsView, FormView的樣式,比如cssClass, Font, BorderWidth, BorderStyle, BorderColor, Width, Height

一般,自定義格式化與我們所要顯示的數據的值有關系。例如, 為了吸引用戶注意那些庫存為空的產品,我們可以將庫存對應的字段UnitsInStock  UnitsOnOrder0的數據背景色設為黃色. 為了高亮化那些貴的產品,則將UnitsInStock  高于$75.00的數據字體設置為粗體

 GridView, DetailsView, FormView的格式自定義可以有多種方法, 在本文中我們將用DataBound RowDataBound兩種事件來完成, 在下一篇里我們將嘗試用alternative的方式 GridView控件中使用TemplateField 

使用DetailsView 控件的 DataBound 事件

當綁定數據到DetailsView控件, 不管是從數據控件或編碼填充數據到DataSource屬性并調用其DataBind()方法。以下幾種事件將觸發

  1. DataBinding事件觸發
  2. 數據綁定到數據綁定控件
  3. DataBound事件觸發

一般在1,2,3之后數據將會通過事件立即填充數據控件,我們還可以自定義事件處理來確定數據是否已經被填充到控件中并按照我們的需要調整顯示格式。我們可以來做個例子.我們將創建一個DetailsView來列出一個產品的一般信息,并且當UnitPrice超過 $75.00 時用粗體,italic字體來顯示UnitPrice的值

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


Step 1: DetailsView中顯示產品信息

CustomFormatting文件夾下新建一個CustomColors.ASPx頁面,從工具箱中拖出一個DetailsView控件到頁面中,設置IDExpensiveProductsPriceInBoldItalic

綁定到一個新的數據源中,并配置此數據源到業務對象ProductsBLL類中的GetProducts()方法,這個的詳細實現步驟已經在前面詳細介紹過了,這里就忽略了

當您綁定ObjectDataSourceDetailsView,我們可以修改一下字段列表,我選擇移除了ProductID, SupplierID, CategoryID, UnitsInStock, UnitsOnOrder, ReorderLevel和那些不被綁定的字段,他們將不會顯示在DetailsView列表中,而那些留下來的我們可以重命名他們,還可以修改他們的顯示格式. 我還清空了DetailsViewHeightWidth屬性,這樣當顯示的只有一條數據時不會出現樣式的混亂。當然我們面對的數據絕不只有一條這么少,顯示怎么辦呢?我們可以檢查DetailsView的智能感知中檢查Enable Paging checkbox是否被勾選上, 這樣我們可以分頁查看所有的數據了

圖一: DetailsView的值能感知中檢查Enable Paging屬性是否被勾選上

在經過這些改變后, DetailsView的代碼更改為

<ASP:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" AutoGenerateRows="False" DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" EnableViewState="False">

    <Fields>

        <ASP:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" />

        <ASP:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True" SortExpression="CategoryName" />

        <ASP:BoundField DataField="SupplierName" HeaderText="Supplier" ReadOnly="True" SortExpression="SupplierName" />

        <ASP:BoundField DataField="QuantityPerUnit" HeaderText="Qty/Unit" SortExpression="QuantityPerUnit" />

        <ASP:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Price"

            HtmlEncode="False" SortExpression="UnitPrice" />

    </Fields>

</ASP:DetailsView>

 

您這時可以按F5執行看看


 

 圖二: DetailsView控件一次顯示一個數據

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


Step 2: DataBound事件中編碼確定數據的值

為了將那些UnitPrice高于$75.00的產品用粗體,italic字體顯示出來,我們首先需要編碼確定UnitPrice的值,對于DetailsView我們可以通過DataBound事件完成. 我們選擇DetailsView并查看屬性視圖(F4位快捷鍵), 如果沒有顯示,則選擇 View(視圖)

Property Window(屬性窗口), 在確保您選擇了DetailsView的情況下雙擊DataBound事件或者輸入您要創建的事件名

 

圖三: DataBound事件創建一個事件處理

代碼中將會自動生成以下代碼

    protected void ExpensiveProductsPriceInBoldItalic_DataBound(object sender, EventArgs e)

    {

 

    }

我們可以通過DataItem屬性來設置DetailsView的綁定項(一些強類型的數據行(DataRow)組成的強類型的數據表(DataTable)), 當數據表(DataTable)綁定到DetailsView時,數據表的第一行將被自動綁定到DetailsViewDataItem屬性,DataItem屬性中包含有DataRowView Object類型),我們可以通過DataRowView來訪問一個ProductsRow DataRow實例,還可以檢測Object的值來確定ProductsRow實例是否存在

下面的代碼描述如何確定UnitPrice是否綁定到DetailsView并且高于$75.00

protected void ExpensiveProductsPriceInBoldItalic_DataBound(object sender, EventArgs e)

{

    // Get the ProductsRow object from the DataItem property...

    Northwind.ProductsRow product = (Northwind.ProductsRow)((System.Data.DataRowView) ExpensiveProductsPriceInBoldItalic.DataItem).Row;

    if (!product.IsUnitPriceNull() && product.UnitPrice > 75m)

    {

        // TODO: Make the UnitPrice text bold and italic

    }

}

 

注意: UnitPrice在數據庫的值為空,我們在綁定到ProductsRow’s UnitPrice屬性之前檢查確定他是否為空,這很重要因為我們可以通過檢查這個屬性來拋出一個強類型的異常 StrongTypingException exception.

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


Step 3: DetailsView中格式化 UnitPrice

到這個時候我們已經知道即將綁定的UnitPrice是否高于$75.00,現在我們來看看怎么通過編碼調整UnitPrice的格式,我們可以通過修改DetailsViewID.Rows[index];修改一行數據,而且我們可以通過訪問DetailsViewID.Rows[index].Cells[index]來訪問某一單元格,這樣我們可以通過修改與格式相關的屬性來格式化這一單元格

訪問某一行需要得到某行的索引,索引從0開始, UnitPrice DetailsView中是第15, 假設他在第四行那么我們可以通過ExpensiveProductsPriceInBoldItalic.Rows[4]來訪問. 這時我們可以通過下面的代碼將這一行顯示為粗體,italic 字體

ExpensiveProductsPriceInBoldItalic.Rows[4].Font.Bold = true;

ExpensiveProductsPriceInBoldItalic.Rows[4].Font.Italic = true;

 

然而,這樣將會格式化Label和值,如果我們只想將值格式話,而且我們需要將格式應用到當前行的第二格,請看下面的代碼

ExpensiveProductsPriceInBoldItalic.Rows[4].Cells[1].Font.Bold = true;

ExpensiveProductsPriceInBoldItalic.Rows[4].Cells[1].Font.Italic = true;

 

我們還可以通過StyleSheet 來顯示標記和樣式相關信息,而不是用確定的某一行某一列來設置格式,我們用CSS來控制格式,打開Styles.css 文件,添加一個新的Class命名為ExpensivePriceEmphasis按照下面的代碼

CSS

.ExpensivePriceEmphasis

{

    font-weight: bold;

    font-style: italic;

}

 

然后再DataBound事件中,設置單元的CssClassExpensivePriceEmphasis,在DataBound事件處理中添加

當查看Chai(費用低于$75.00),價格將會用正常格式顯示 4),但是當查看Mishi Kobe Niku,(價格為$97.00)則會用我們設置的格式顯示(5)


 

4: 價格低于$75.00將會用正常格式顯示


 

5: 價格高于$75.00將會用 粗體, Italic 字體顯示

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


使用FormView控件的 DataBound 事件

綁定到FormView數據的步驟和DetailsView的步驟類似都要創建一個DataBound事件處理, 聲明綁定到控件的DataItem類型屬性, 然后執行綁定。然而,他們更新的方式不同

FormView不包括任何綁定列也不包含行的集合, 取而代之的是他由一系列包含若干靜態HTML Web控件,綁定表達式的模板組合。調整 FormView的外觀涉及到調整一個或多個FormView的模板

讓我們像前一個例子那樣用FormView列出產品項,但是這次我們僅僅用紅色字體顯示units小于等于10的產品的nameunits

Step 4: FormView中顯示產品信息

添加一個FormViewCustomColors.ASPx中,設置其IDLowStockedProductsInRed,像前一個步驟一樣綁定數據到ObjectDataSource中, 這將在FormView中創建ItemTemplate, EditItemTemplate, InsertItemTemplate . 移除EditItemTemplateInsertItemTemplate 并在 ItemTemplate 中僅包含ProductName UnitsInStock , 在智能感知中檢查Allow Paging(分頁)標記是否被選上

在這些操作后FormView的代碼大概會成這樣

<ASP:FormView ID="LowStockedProductsInRed" runat="server" DataKeyNames="ProductID"

    DataSourceID="ObjectDataSource1" AllowPaging="True" EnableViewState="False">           

    <ItemTemplate>

        <b>Product:</b>

        <ASP:Label ID="ProductNameLabel" runat="server" Text='<%# Bind("ProductName") %>'>

        </ASP:Label><br />

        <b>Units In Stock:</b>

        <ASP:Label ID="UnitsInStockLabel" runat="server" Text='<%# Bind("UnitsInStock") %>'>

        </ASP:Label>

    </ItemTemplate>

</ASP:FormView>

 

注意ItemTemplate 包含的代碼:

·         靜態HTML – “Product:” “Units In Stock:” 包含 <br /> <b> 元素.

·         Web 控件兩個Label控件, ProductNameLabel UnitsInStockLabel.

·         綁定表達式<%# Bind("ProductName") %> <%# Bind("UnitsInStock") %> 表達式, 綁定值到LabelText屬性上

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


Step 5: DataBound 事件處理中編碼確定數據的值

FormView的標記完成后,下一步就是確定UnitsInStock的值是否小于等于10,這里和在DetailView中類似,先創建DataBound事件


/p>

6: 創建 DataBound 事件處理

在事件中聲明FormViewDataItem屬性到ProductsRow實例中,確定UnitsInPrice的值并將對應的值用紅色字體顯示

protected void LowStockedProductsInRed_DataBound(object sender, EventArgs e)

{

    // Get the ProductsRow object from the DataItem property...

    Northwind.ProductsRow product = (Northwind.ProductsRow)((System.Data.DataRowView)LowStockedProductsInRed.DataItem).Row;

    if (!product.IsUnitsInStockNull() && product.UnitsInStock <= 10)

    {

        // TODO: Make the UnitsInStockLabels text red

    }

}

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


Step 6:FormView ItemTemplate中格式化UnitsInStockLabel Label

最后一步就是要在ItemTemplate設置UnitsInStockLabel的樣式為紅色字體,在ItemTempelete中查找控件可以使用FindControl(“controlID”)方法

WebControlType someName = (WebControlType)FormViewID.FindControl("controlID");

 

對于我們這個例子我們可以用如下代碼來查找該Label控件

Label unitsInStock = (Label)LowStockedProductsInRed.FindControl("UnitsInStockLabel");

 

當我們找到這個控件時則可以修改其對應的style屬性,在style.css中已經有一個寫好的LowUnitsInStockEmphasiscSS Class ,我們通過下面的代碼將cSS Class設置到對應的屬性

    protected void LowStockedProductsInRed_DataBound(object sender, EventArgs e)

    {

        // Get the ProductsRow object from the DataItem property...

        Northwind.ProductsRow product = (Northwind.ProductsRow)((System.Data.DataRowView)LowStockedProductsInRed.DataItem).Row;

        if (!product.IsUnitsInStockNull() && product.UnitsInStock <= 10)

        {

            Label unitsInStock = (Label)LowStockedProductsInRed.FindControl("UnitsInStockLabel");

 

            if (unitsInStock != null)

            {

                unitsInStock.CssClass = "LowUnitsInStockEmphasis";

            }

        }

    }

注意: 這種方式在FormViewGridView中也可以通過設置TemplateFields來達到同樣的效果,我們將在下一篇中討論TemplateFields

7顯示FormView在當UnitsInStock大于10的情況,圖8則顯示小于等于10的情況


7 : 在高于10的情況下,沒有值被格式化

8:小于等于10時,值用紅色字體顯示

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


GridView RowDataBound 事件自定義格式化

前面我們討論了在FormViewDetailsView中實現數據綁定的步驟,現在讓我們回顧下

  1. DataBinding事件觸發
  2. 數據綁定到數據綁定控件
  3. DataBound事件觸發

對于FormViewDetailsView有效因為只需要顯示一個數據,而在GridView中,則要顯示所有數據,相對于前面三個步驟,步驟二有些不同

在步驟二中,GridView 列出所有的數據,對于某一個記錄將創建一個GridViewRow 實例并綁定,對于每個添加到GridView 中的 GridViewRow兩個事件將會觸發:

·         RowCreatedGridViewRow被創建時觸發

·         RowDataBound當前記錄綁定到GridViewRow時觸發.

對于GridView,請使用下面的步驟

  1. DataBinding事件觸發
  2. 數據綁定到數據綁定控件

對于每一行數據..

a.       創建GridViewRow

b.       觸發 RowCreated 事件

c.       綁定數據到GridViewRow

d.       觸發RowDataBound事件

e.       添加GridViewRowRows 集合

  1. DataBound事件觸發

為了自定義格式化GridView單獨記錄,我們需要為RowDataBound事件創建事件處理,讓我們添加一個GridViewCustomColors.ASPx中,并顯示name, category, price,用黃色背景高亮那些價格小于$10.00的產品

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


Step 7:GridView中顯示產品信息

添加一個GridViewFormView的下方,設置IDHighlightCheapProducts.我們之前已經設置了一個ObjectDataSource來獲取產品數據,現在我們綁定GridViewObjectDataSource. 之后,編輯GridView的綁定列包含產品的name.categorie,price屬性。完成之后GridView的代碼將會是:

<ASP:GridView ID="HighlightCheapProducts" runat="server" AutoGenerateColumns="False"

    DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" EnableViewState="False">

    <Columns>

        <ASP:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" />

        <ASP:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True" SortExpression="CategoryName" />

        <ASP:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Price"

            HtmlEncode="False" SortExpression="UnitPrice" />

    </Columns>

</ASP:GridView>

 

 

圖九顯示瀏覽器查看的結果


9: GridView顯示產品的name, category, price

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


Step 8:RowDataBound事件處理中編碼確定數據對應的值

ProductsDataTable綁定到GridViewGridView將會產生若干個ProductsRowGridViewRowDataItem屬性將會生成一個實際的ProductRow。在GridView RowDataBound事件發生之后,為了確定UnitsInStock的值,我們需要創建RowDataBound的事件處理,在其中我們可以確定UnitsInStock的值并做相應的格式化

EventHandler的創建過程和前面兩個一樣


10: 創建GridViewRowDataBound事件的事件處理

在后臺代碼里將會自動生成如下代碼

protected void HighlightCheapProducts_RowDataBound(object sender, GridViewRowEventArgs e)

{

}

 

RowDataBound事件觸發,第二個參數GridViewRowEventArgs中包含了對GridViewRow的引用,我們用如下的代碼來訪問GridViewRow中的ProductsRow

    protected void HighlightCheapProducts_RowDataBound(object sender, GridViewRowEventArgs e)

    {        // Get the ProductsRow object from the DataItem property...

        Northwind.ProductsRow product = (Northwind.ProductsRow)((System.Data.DataRowView)e.Row.DataItem).Row;

        if (!product.IsUnitPriceNull() && product.UnitPrice < 10m)

        {

            // TODO: Highlight the row yellow...

       }

    }

當運用RowDataBound事件處理時,GridView由各種類型不同的行組成,而事件發生針對所有的行類型, GridViewRow的類型可以由RowType屬性決定,可以是以下類型中的一種

·         DataRow GridViewDataSource中的一條記錄

·         EmptyDataRowGridViewDataSource顯示出來的某一行為空

·         Footer 底部行; 顯示由GridViewShowFooter屬性決定

·         Header 頭部行; 顯示由GridViewShowHeader屬性決定

·         Pager GridView的分頁,這一行顯示分頁的標記

·         Separator 對于GridView不可用,但是對于DataListReapterRowType屬性卻很有用,我們將在將來的文章中討論他們

當上面四種(DataRow, Pager Rows Footer, Header)都不合適對應值時,將返回一個空的數據項, 所以我們需要在代碼中檢查GridViewRowRowType屬性來確定:

 

protected void HighlightCheapProducts_RowDataBound(object sender, GridViewRowEventArgs e)

{

        // Make sure we are working with a DataRow

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

        {

            // Get the ProductsRow object from the DataItem property...

            Northwind.ProductsRow product = (Northwind.ProductsRow)((System.Data.DataRowView)e.Row.DataItem).Row;

            if (!product.IsUnitPriceNull() && product.UnitPrice < 10m)

            {

                // TODO: Highlight row yellow...

            }

        }

}

 

系列文章導航:

ASP.NET 2.0數據教程之一:創建一個數據訪問層

ASP.NET 2.0數據教程之二:創建一個業務邏輯層

ASP.NET 2.0數據教程之三:母板頁和站點導航

ASP.NET 2.0數據教程之四:使用ObjectDataSource展現數據

ASP.NET 2.0數據教程之五:聲明參數

ASP.NET 2.0數據教程之六:編程設置ObjectDataSource的參數值

ASP.NET 2.0數據教程之七:使用DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之八:使用兩個DropDownList過濾的主/從報表

ASP.NET 2.0數據教程之九:跨頁面的主/從報表

ASP.NET 2.0數據教程之十:使用 GridView 和DetailView實現的主/從報表

ASP.NET 2.0數據教程之十一:基于數據的自定義格式化

ASP.NET 2.0數據教程之十二:在GridView控件中使用TemplateField


Step 9:用黃色高亮那些UnitPrice小于$10.00的行

我們需要訪問GridViewID.Rows[index]來訪問index對應的那一行,GridViewID.Rows[index].Cells[index]來訪問某一單元格.然而當RowDataBound事件觸發時,GridViewRow卻沒有添加到Rows集合中, 因此我們不能在RowDataBound事件處理中通過當前GridViewRow實例

取而代之,我們可以通過e.Row來訪問。為了高亮某一行我們用下面的代碼

e.Row.BackColor = System.Drawing.Color.Yellow;

我們還可以通過cSSClass取得同樣的效果(推薦)

    protected void HighlightCheapProducts_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        // Make sure we are working with a DataRow

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

        {

            // Get the ProductsRow object from the DataItem property...

            Northwind.ProductsRow product = (Northwind.ProductsRow)((System.Data.DataRowView)e.Row.DataItem).Row;

            if (!product.IsUnitPriceNull() && product.UnitPrice < 10m)

            {

                e.Row.CssClass = "AffordablePriceEmphasis";

            }

        }

    }


圖 11: 所需要的行用高亮黃色顯示

總結

在本篇中我們演示了基于數據綁定來自定義格式化GridView, DetailsView, FormView的方法。為了完成這些,我們創建DataBound或者RowDataBound事件,為了訪問DetailsViewFormView的數據綁定,我們可以通過DataItem屬性。對于GridView,每個GridViewRow實例的DataItem屬性包含了綁定的數據(RowDataBound事件處理中可用)

為了調整格式,我們可能需要訪問某一特定的行,在GridViewDetailsView中我們可以通過索引訪問,而在FormView中我們則需要用FindControl("controlID"),同時FindControl("controlID")通常都可以訪問Web控件Tempelete中的某個控件

在下一篇中我們將討論如何在GridViewDetailsView使用Tempeletes, 還將討論另外一些自定義格式化的方法

祝編程快樂!

作者簡介

Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創始人,自1998年以來一直應用 微軟Web技術。Scott是個獨立的技術咨詢顧問,培訓師,作家,最近完成了將由Sams出版社出版的新作,24小時內精通ASP.NET 2.0。他的聯系電郵為mitchell@4guysfromrolla.com,也可以通過他的博客http://ScottOnWriting.NET與他聯系。

 

NET技術ASP.NET 2.0數據教程之十一:基于數據的自定義格式化,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人美女福利在线观看 | 国产91一区二这在线播放 | 国产精品麻豆久久久 | 亚洲一区小说区中文字幕 | 很黄很黄叫声床戏免费视频 | 国产2| 色视频网站色视频播放 | 国产中文字幕乱人伦在线观看 | 欧美成人精品福利在线视频 | 亚洲综合网站 | 国产区图片区小说区亚洲区 | 精品伊人久久久大香线蕉欧美 | 免费看黄网站在线看 | 黄色网络在线观看 | 中国一级大黄大片 | 福利国产精品 | 伊人网在线免费视频 | 91精品国产丝袜白色高跟鞋 | 国产99在线播放免费 | 国产欧美国产精品第二区 | 欧美福利视频 | 一个人免费播放在线视频看片 | 亚洲精品国产专区91在线 | 亚洲日本激情综合在线观看 | 国产一区成人 | 色综色天天综合网 | 免费人成a大片在线观看动漫 | 中文字幕在线国产 | 日韩字幕无线乱码 | 久久久久国产精品美女毛片 | 久久久久久久久久综合情日本 | 欧美成人免费一区在线播放 | 欧美 亚洲 丝袜 清纯 中文 | 国产在线视频色综合 | 国产亚洲精品午夜高清影院 | 婷婷精品在线 | 国产成人亚洲精品乱码在线观看 | 涩涩色中文综合亚洲 | 亚洲一区二区福利视频 | 91亚洲国产成人久久精品网址 | 亚洲综合色播 |