2008-10-16 44 views
16

我正在尋找一種方法來根據數據綁定項的屬性選擇性地將一個CSS類應用於GridView中的單個行。有選擇地將CSS應用到gridview中的一行

例如爲:

GridView的數據源是SummaryItemsSummaryItem一個通用的列表有一個屬性ShouldHighlight。當ShouldHighlight == true關聯行的CSS應設置爲highlighted

有什麼想法?

回答

24

很容易

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRowView drv = e.Row.DataItem as DataRowView; 
     if (drv["ShouldHighlight"].ToString().ToLower() == "true") 
      e.Row.CssClass = "highlighted"; 
    } 
} 

如果使用數據表作爲數據源代碼上述工程

變化:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     myClass drv = (myClass)e.Row.DataItem; 
     if (drv.ShouldHighlight) 
      e.Row.CssClass = "highlighted"; 
    } 
} 

只是使用泛型時,上面的例子:

public class myClass 
{ 
    public Boolean ShouldHighlight 
    { get; set; } 
} 

,如果你是泛型(列表,字典等)

工作牢記:

e.Row.dataItem 

總是返回你與填充行整個對象,所以很容易從這裏操縱網頁中數據的外觀。

您應該使用RowDataBound事件,該事件會在數據附加到行對象後觸發,但尚未在頁面中寫入HTML代碼,這樣您就可以檢查ShouldHighlight值(由於我轉換爲字符串不知道類型,如果你知道它是一個布爾值,你可以改變它)。

這段代碼的運行速度比megakemp代碼的原因你沒有創建一個列表對象,並用每行的整個數據源填充快得多......

附:採取look at this website,您可以使用GridView的對象,你要記住

+0

謝謝!我已經給了一個想法,但已經消除了它,因爲我已經認爲HTML已經生成了(假設我應該真的嘗試過) – 2008-10-16 10:56:16

+0

這是我最好的方式來存檔在dataGridView中的修改,請記住,你總是可以得到已經使用(如果您在ItemTemplate中有Label1)將模板放置在模板中: (Label)e.Row.FindControl(「Label1」).Text = dvr.myPropertyText; – balexandre 2008-10-16 11:14:06

7

一件事是,在RowCreated或RowDataBound事件處理程序設置Row.CssClass屬性將覆蓋任何默認樣式找到適合你的項目幾個教程你可能已經在電網層面上應用。 GridView控件讓您輕鬆訪問通過諸如屬性行樣式:

gvGrid.AlternatingRowStyle.CssClass = ALTROW_CSSCLASS 
gvGrid.RowStyle.CssClass = ROW_CSSCLASS 

但是,當你的CssClass值分配給特定的行,因爲是你在這種情況下需要,分配overrrules任何頂級分配在網格層面。這些作業不會像我們想要的那樣「級聯」。所以,如果你想保留頂層類的分配,並且也可以自己層層分配,那麼你需要檢查rowState來查看你正在處理什麼樣的行,然後連接你的類名稱。

If(item.ShouldHighlight) 
{ 
    If(e.Row.RowState == DataControlRowState.Alternate) 
    { 
     e.Row.CssClass = String.Format("{0} {1}", "highlight", ALTROW_CSSCLASS) 
    } 
    else 
    { 
     e.Row.CssClass = String.Format("{0} {1}", "highlight", ROW_CSSCLASS) 
    } 


}