17

GridViewデータ バインドされた項目のプロパティに基づいて、個々の行に CSS クラスを選択的に適用する方法を探しています。

例えば:

GridView のデータ ソースは、の一般的なリストでSummaryItemsありSummaryItem、プロパティがありますShouldHighlightShouldHighlight == true関連付けられた行の CSS を設定する必要がある場合highlighted

何か案は?

4

2 に答える 2

25

非常に簡単

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";
    }
}

上記のコードは、 DataTable を DataSource として使用する場合に機能します

への変更:

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

行に入力するオブジェクト全体を常に返すため、ここから Web ページのデータの外観を簡単に操作できます。

データが行オブジェクトにアタッチされた後にトリガーされる RowDataBound イベントを使用する必要がありますが、まだページに HTML コードが書き込まれていません。 、ブール値であることがわかっている場合は変更できます)。

このコードは、リストオブジェクトを作成せず、各行のデータソース全体を入力していないため、メガケンプコードよりもはるかに高速に実行されます...

PSはこのWebサイトを見てください。GridViewオブジェクトを使用して、プロジェクトのいくつかのチュートリアルを見つけることができます

于 2008-10-16T10:44:26.947 に答える
7

RowCreated または RowDataBound イベント ハンドラで Row.CssClass プロパティを設定すると、グリッド レベルで適用したデフォルト スタイルが上書きされることに注意してください。GridView を使用すると、次のようなプロパティを介して行スタイルに簡単にアクセスできます。

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

ただし、CssClass 値を特定の行に割り当てると、この場合の必要性に応じて、割り当てはグリッド レベルでのトップレベルの割り当てを無効にします。割り当ては、必要に応じて「カスケード」しません。したがって、最上位クラスの割り当てを保持し、独自のより具体的なレイヤーも保持する場合は、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)
    }


}
于 2008-11-24T20:08:28.850 に答える