Выборочно применить CSS к строке в виде сетки

StackOverflow https://stackoverflow.com/questions/208038

  •  03-07-2019
  •  | 
  •  

Вопрос

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

например.:

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

Любые идеи?

Это было полезно?

Решение

очень просто

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

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

иметь ввиду:

e.Row.dataItem

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

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

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

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

Другие советы

Следует иметь в виду, что установка свойства 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)
    }


}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top