Выборочно применить CSS к строке в сетке - PullRequest
17 голосов
/ 16 октября 2008

Я ищу способ выборочного применения класса CSS к отдельным строкам в GridView на основе свойства элемента привязки данных.

например:.

Источник данных GridView - это общий список SummaryItems, а SummaryItem имеет свойство ShouldHighlight. Когда ShouldHighlight == true CSS для связанной строки должен быть установлен на highlighted

есть идеи?

Ответы [ 2 ]

25 голосов
/ 16 октября 2008

очень просто

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 в качестве источника данных

изменить на:

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

если вы работаете с Generics (Список, Словарь и т. Д.)

имейте в виду:

e.Row.dataItem

всегда возвращает весь объект, которым вы заполняете строку, поэтому отсюда легко манипулировать внешним видом данных на веб-странице.

вам следует использовать событие RowDataBound, которое сработает после того, как данные прикреплены к объекту строки, но еще не записали HTML-код на странице, таким образом вы можете проверить значение ShouldHighlight (я преобразовал в строку, потому что я не если вы знаете тип, вы можете изменить его, если знаете, что это логическое значение).

этот код работает намного быстрее, чем код megakemp, потому что вы не создаете объект List и не заполняете весь источник данных для каждой строки ...

P.S. посмотрите на этот сайт , вы можете найти несколько учебных пособий для вашего проекта, используя объект GridView

7 голосов
/ 24 ноября 2008

Следует иметь в виду, что установка свойства Row.CssClass в обработчиках событий RowCreated или RowDataBound переопределит все стили по умолчанию, которые вы, возможно, применили на уровне сетки. 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)
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...