若 GridView 中的資料列需判斷欄位值,針對符合條件的資料列做標記的動作;例如需要將「庫存小於30」的產品的資料列設定為紅色粗體字,以做警告提示使用。

以 Northwind 資料庫的 Products 資料表為例,若需要將 UnitsInStock 小於 30 的資料列標記為紅色粗體字,則在 GridView 的 RowDataBound 事件中撰寫如下程式碼。

在 RowDataBound 事件中處理有個好處,因為只有這時抓得到繫結的資料,可以直接利用欄位值去做判斷,不需使用 FindControl 的方式來判斷;一般我會建議非必要儘量少用 FindControl,因為 FindControl 常會因設計畫面的變更(例如 GridView 加入一個新的欄位),而導致程式碼錯誤。

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        Dim oRow As Data.DataRowView

        If e.Row.RowType = DataControlRowType.DataRow Then
            oRow = CType(e.Row.DataItem, Data.DataRowView)
            '若 UnitsInStock 欄位值小於30,則將該資料列標記為紅色粗體字
            If CInt(oRow("UnitsInStock")) < 30 Then
                e.Row.Font.Bold = True
                e.Row.ForeColor = Drawing.Color.Red
            End If
        End If
    End Sub

執行結果如下

ASP.NET 魔法學院


DotBlogs Tags: GridView RowDataBound

Feedback

  • Odin 2008/11/9 下午 05:32 回覆

    # re: Gridview 依條件判斷標記資料列

    大大,這功能很強ㄟ,
    我想另外問一下,如你的範例中,可以在最左邊多一欄叫"警示",如果UnitsInStock <30,"警示"的地方會亮紅燈,若UnitsOnOrder<30時,"警示"的地方會亮橘燈,簡單來說就是警告的顏色不是反映在整列,而是所有條件的判斷結果會在"警示"欄位中顯示出來,因為目前有需要到這個功能,不知道厲害的大大之不知道要怎樣解決^^

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 7 and 2 and type the answer here: