Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / GridView / 15 сообщений из 15, страница 1 из 1
14.11.2011, 13:53:15
    #37525436
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Подскажите пожалуйста, что не так делаю? Мне нужно в гриде сравнить значения ячеек столбца с текущей датой, если значение(дата) выходит за рамки текущей даты, то нужно покрасить строку в гриде красным цветом.
Делаю так:

protected void GridView1_DataBound(object sender, EventArgs e)
{

for (int i = 0; i < GridView1.Rows.Count; ++i)
{

GridViewRow tmp1 = GridView1.Rows[i];
string dtText = System.Text.RegularExpressions.Regex.Replace(GridView1.Rows[i].Cells[4].Text, "(\\d+)\\.(\\d+)\\.(\\d+)", "$3-$2-$1");

if (DateTime.Parse(dtText) < DateTime.Now.Date)
tmp1.Style.Add("background-color", "Red");


}


если вывести значение заполненого грида:

Response.Write(tmp1.Cells[4].Text);

то он выводит пустоту, хотя грид заполнен датами, в чем причина понять не могу((
...
Рейтинг: 0 / 0
14.11.2011, 13:58:23
    #37525452
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Можно и вот так, но смысл не меняется:

for (int i = 0; i < GridView1.Rows.Count; ++i)
{

GridViewRow tmp1 = GridView1.Rows[i];

if (DateTime.Parse(tmp1.Cells[4].Text) < DateTime.Now.Date)

tmp1.Style.Add("background-color", "Red");


}
...
Рейтинг: 0 / 0
14.11.2011, 14:05:10
    #37525471
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
...
Рейтинг: 0 / 0
14.11.2011, 14:13:41
    #37525489
Andrey1306
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
А может вообще на стороне БД это сделать ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CASe 
 WHEN Date <> GETDATE() then  1  else  0 
End as Bool


/*или так если время используется*/
CASe 
 WHEN CAST(CAST(CAST(CAST(Date  AS binary( 8 )) AS binary( 4 )) AS binary( 8 )) AS datetime) <> GETDATE() then  1  else  0 
End as Bool

...
Рейтинг: 0 / 0
14.11.2011, 14:57:01
    #37525618
Starlex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Andrey1306,

У вас в чем проблемы - с покраской или с получением условий? Если убрать все условия, в красный цвет красит?
...
Рейтинг: 0 / 0
15.11.2011, 09:39:39
    #37526689
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Проблема с самим условием, мне нужно чтобы оно срабатывало и соответственно красило строки по условию, а то что без условия работает я и так знаю
...
Рейтинг: 0 / 0
15.11.2011, 09:59:10
    #37526719
Starlex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
alexay_1985,

То что посоветовал Паганель через RowDataBound действительно самое оптимальное. Если связываете grisview через коллекцию своих объектов, то e.Row.DataItem - это объект, приводите его к объекту в вытягиваете дату.
...
Рейтинг: 0 / 0
15.11.2011, 11:21:43
    #37526894
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Вы по ссылке ходили? Пример видели?
...
Рейтинг: 0 / 0
15.11.2011, 13:44:31
    #37527228
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Да видел пример, только пока не разберусь, как могу приминить DataItem в моем случае, пробовал писать следующее и всеравно не чего не выводит:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowState == DataControlRowState.Edit)
{
DataRowView rowView = (DataRowView)e.Row.DataItem;

String dateEnd = rowView["dateEnd"].ToString();

Response.Write(dateEnd);// для наглядности

}


}
Подскажите как быть, может неправильно делаю что то?
...
Рейтинг: 0 / 0
15.11.2011, 13:50:03
    #37527245
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Посмотрите под дебагом на rowView["dateEnd"]
Что там за значение и какого типа?
...
Рейтинг: 0 / 0
15.11.2011, 13:57:06
    #37527257
Starlex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
alexay_1985,

Условие
Код: plaintext
if (e.Row.RowState == DataControlRowState.Edit)
имхо не нужно, при выводе таких строк нет. Нужно просто проверить на DataRow, чтоб шапка не попалась.
...
Рейтинг: 0 / 0
15.11.2011, 14:05:33
    #37527279
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Я так понимаю вы имели в виду с помощью точки останова проверить какое значение приходит, я проверил туда приходит Null, хотя грид забит данными
...
Рейтинг: 0 / 0
22.11.2011, 15:16:23
    #37538731
rumka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
народ прав,обработку лучше перенести в запрос,а при биндинге строки обрабатывать результат,что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                     if (DataBinder.Eval(row.DataItem, "имя поля").ToString() != "")
                    {

                            e.Row.ForeColor = System.Drawing.Color.Red;
                     }
             }
        }

...
Рейтинг: 0 / 0
20.12.2011, 09:03:14
    #37584322
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Ругаеться на строчку: if (DataBinder.Eval(row.DataItem, "имя поля").ToString() != "") компонент row, пишет что отсутствует в текущем контексте, может using кокогото не хватает или в чем еще может быть дело, как переменную мы же ее не объявляем?
...
Рейтинг: 0 / 0
21.12.2011, 09:08:28
    #37586163
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GridView
Всем спасибо за помощь, вот рабочий вариант:

if (e.Row == null) return;
if (e.Row.DataItem == null) return;

DataRowView rowView = (DataRowView)e.Row.DataItem;
if (rowView["dateEnd"] == null) return;
String dateEnd = rowView["dateEnd"].ToString();
if (DateTime.Parse(dateEnd) < DateTime.Now.Date)
e.Row.Style.Add("background-color", "#F34E4E");
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / GridView / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]