Solved

GridView BackColor

Posted on 2014-09-30
4
212 Views
Last Modified: 2014-09-30
I have a gridview that looks like this. There a way I can extend the backcolor of the row so that goes to multiple rows. For example, show the color blue from 1.5 to 3.25 for Dan, the color red from 1.5 to 2.75 for Mike
        Dan     Mike        John
1                                      X
1.5       X      X

2
2.5
2.75             X
3
3.25      X
4
5                             X
 
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
                        DataRowView drview = e.Row.DataItem as DataRowView;
                        if (e.Row.RowType == DataControlRowType.DataRow)
                        {
                            if (e.Row.Cells[1].Text == "1")
                            {
                                e.Row.Cells[1].Text = "X";
                                e.Row.Cells[1].BackColor = System.Drawing.Color.Blue;
                            }
                            if (e.Row.Cells[2].Text == "1")
                            {
                                e.Row.Cells[2].Text = "X";
                                e.Row.Cells[2].BackColor = System.Drawing.Color.Red;
                            }
                            if (e.Row.Cells[3].Text == "1")
                            {
                                e.Row.Cells[3].Text = "X";
                                e.Row.Cells[3].BackColor = System.Drawing.Color.Yellow;
                            }
                        }
        }

Open in new window

0
Comment
Question by:RecipeDan
  • 2
  • 2
4 Comments
 
LVL 24

Expert Comment

by:chaau
ID: 40353717
I think the RowDataBound event is not the right place for setting the colours for the continuous rows. You need to set it in a function after you have build the whole grid. The code will be as simple as this:
Color clr[3] = {System.Drawing.Color.Blue, System.Drawing.Color.Red, System.Drawing.Color.Yellow}; // add more colours here
for(int i = 0; i < min(GridView1.Columns.Count, 3); i++)
{
  bool started = false;
  foreach(GridViewRow row in GridView1.Rows)
  {
    if(row.Cells[i].Text == "X")
    {
      if(!started) started = true; else break;
    }
    if(started) row.Cells[i].BackColor = clr[i];
  }
}

Open in new window

0
 
LVL 1

Author Comment

by:RecipeDan
ID: 40353835
I am getting two errors with your code:

bad array declarator
min does not exist in the current context

I fixed the errors and loaded LoadColorsGrid from RowDataBound after everything was done. Should I have loaded it from somewhere else? I attached a screenshot of the results but it is not correct neither. I do not know why one column has two rows colored and the second column only has one and the third has none.
        protected void LoadColorsGrid()
        {
            System.Drawing.Color[] colorList = new System.Drawing.Color[3];             
            colorList[0] = Color.Blue;            
            colorList[1] = Color.Red;            
            colorList[2] = Color.Yellow; 
 
            for(int i = 0; i < 3 ; i++)
            {
              bool started = false;
              foreach(GridViewRow row in GridView1.Rows)
              {
                if(row.Cells[i].Text == "X")
                {
                  if(!started) started = true; else break;
                }
                if(started) row.Cells[i].BackColor = colorList[i];
              }
            }
        }

Open in new window

Screenshot.png
0
 
LVL 24

Accepted Solution

by:
chaau earned 500 total points
ID: 40353845
Thanks for testing. I figured the errors. This code will do the job:
        protected void LoadColorsGrid()
        {
            System.Drawing.Color[] colorList = new System.Drawing.Color[3];             
            colorList[0] = Color.Blue;            
            colorList[1] = Color.Red;            
            colorList[2] = Color.Yellow; 
 
            for(int i = 0; i < 3 ; i++)
            {
              bool started = false;
              foreach(GridViewRow row in GridView1.Rows)
              {
                if(row.Cells[i+1].Text == "X")
                {
                  row.Cells[i+1].BackColor = colorList[i];
                  if(!started) started = true; else break;
                }
                if(started) row.Cells[i+1].BackColor = colorList[i];
              }
            }
        }

Open in new window

0
 
LVL 1

Author Comment

by:RecipeDan
ID: 40353862
It works great. Thank you for your assistance. I spent the last two days trying to figure it out.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question