Как установить цвет строки в зависимости от состояния столбца на сайте asp.net - PullRequest
1 голос
/ 24 октября 2011
 protected void MyGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
    if (e.Row.RowType == DataControlRowType.DataRow)
        {
        Image img = (Image)e.Row.FindControl("Status");
            int msgid;

            int.TryParse(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "MsgID")), out msgid);            
            string status = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "MessageActive"));
        if(status.Equals("No"))
        {
            e.Row.BackColor = Color.Red;
        } 
         //Based on some condition I am assigning images to the row
           if (value >= Toptarg)
            {
                img.ImageUrl = "Styles/Images/GreenBox.jpg";
                img.ToolTip = "Met Top Target";
                img.AlternateText = "Met Top Target";
            }
            else
            {
                img.ImageUrl = "Styles/Images/AmberBox.jpg";
                img.ToolTip = "In Progress";
                img.AlternateText = "In Progress";
            }

         }
      }

У меня есть gridView, и у него есть столбец с именем MessageActive. В строке databind я получаю значение messageActive. Если значением messageActive является «Да», никаких изменений не требуется. Если выбрано «Нет», я хочу отобразить конкретную строку красным цветом. Как установить цвет фона строки в привязке к строке

Некоторые свойства вида сетки

   <RowStyle BackColor="White" />
   <AlternatingRowStyle BackColor="MistyRose" />
   <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
   <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
   <HeaderStyle BackColor="#696969" Font-Bold="True" ForeColor="White" />

Пространство имен использование System.Web.UI.WebControls; используя System.Drawing;

Я получаю эту ошибку

 'Image' is an ambiguous reference between 'System.Web.UI.WebControls.Image' and 'System.Drawing.Image'

Source Error:


Line 56:         if (e.Row.RowType == DataControlRowType.DataRow)
Line 57:         {
Line 58:             Image img = (Image)e.Row.FindControl("Status");
Line 59:             int msgid;
Line 60:             int.TryParse(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "MsgID")), out msgid); 

Ответы [ 3 ]

1 голос
/ 24 октября 2011

добавьте это в свой метод:

if(status.Equal("No"))
{
  e.Row.BackColor = Color.Red; // or Color.FromName("#FF0000");
}

в качестве примечания, я бы манипулировал цветом или другими стилями в обработчике событий PreRender, а не в RowDataBound ...

Редактировать: Вы должны добавить ссылку на сборку .NET System.Drawing, поскольку по умолчанию она не включена в шаблоны веб-проектов ASP.NET ...

1 голос
/ 24 октября 2011

Вам необходимо изменить эту строку:

Image img = (Image)e.Row.FindControl("Status");

Чтобы указать ссылку на класс изображения, который вы хотите, например:

System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)e.Row.FindControl("Status");

Или другому классу, если вы хотите его использовать.

1 голос
/ 24 октября 2011

Попробуйте это:

string status = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "MessageActive"));
if (status == "No")
{
    e.Row.BackColor = Drawing.Color.Red
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...