C # помогите установить класс Row Css вида сетки - PullRequest
1 голос
/ 15 января 2010

Мне нужно чередовать цвета строк в сетке, но не в каждой другой строке. У меня есть переменная _AddDate, которую я могу проверить на событие GridRowBound. Если он не изменился, я хочу применить один класс CSS, а если он есть, я хочу применить другой класс. Код, который я имею, делает почти то, что я хочу, но я устанавливаю класс в строке, когда значение изменяется, и к каждой параллельной строке, которая должна быть того же класса, применен неправильный класс. Это определенно что-то не так с моим методом. Может кто-то указать мне верное направление? Также есть название для этих типов функций. Время от времени мне приходится делать такие вещи, и они могут быть хитрыми, чтобы выяснить правильный алгоритм. Вот что у меня есть.

 private void GridRowBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.CssClass = SetRowColor();

        }
    }

    private DateTime _dateToSwitch;

    private string SetRowColor()
    {

        var tmpDate = _AddDate;
        var doSwitch = (tmpDate == _dateToSwitch);
        if (!doSwitch)
        {
            _dateToSwitch = tmpDate;
            return "commentRow";
        }
         return "altCommentRow";



    }

У меня есть другая функция, которая правильно устанавливает _AddDate на соответствующее значение, поэтому оно всегда актуально при оценке.

Любая помощь приветствуется. Счастливая пятница!

Ура, ~ ck в Сан-Диего

Ответы [ 2 ]

1 голос
/ 15 января 2010

Я не могу придумать более элегантный способ сделать это (на данный момент) помимо этого:

private DateTime _previousRowDateTime;
private string[] _commentRowClasses = {"commentRow", "altCommentRow"};
private int _commentRowClassesIndex = 0;

private string SetRowColor()
{
  if( _AddDate != _previousRowDateTime ) 
  {
    _commentRowClassesIndex = ( _commentRowClassesIndex + 1 ) % 2;
    _previousRowDateTime = _AddDate;
  }
  return _commentRowClasses[_commentRowClassesIndex];
}
0 голосов
/ 16 января 2010

Что говорит ваш код:

If the last date stored is NOT equal to the "_AddDate" variable
    then SET it to that and return that this is a "commentRow".

If the last date stored IS equal to the "_AddDate" variable
    then simply return "altCommentRow".

Таким образом, в 2 последовательных строках с одинаковой датой, где _AddDate НЕ изменился, первая получит стиль "commentRow", а вторая - "altCommentRow".

Если ваша цель состоит в том, чтобы вращать цвета так, чтобы все последовательные строки с одной и той же датой были одного цвета, то при достижении новой даты переключитесь на следующий цвет, вы можете попробовать что-то вроде этого:

private bool _AltFlag;
private string _PreviousDate;

private string SetRowColor()
{
    if (_AddDate != _PreviousDate)
    {
        _AltFlag = !_AltFlag;
    }

    return _AltFlag ? "altCommentRow" : "commentRow";
}

По сути, мы настроили bool, чтобы сообщить нам, какие из классов мы используем в настоящее время. Если наша текущая дата не совпадает с предыдущей, то щелкните флаг и верните новый класс. Если это то же самое, мы сохраняем тот же флаг и возвращаем класс.

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