?
Solved

GridView BackColor

Posted on 2014-09-30
4
Medium Priority
?
217 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 25

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 25

Accepted Solution

by:
chaau earned 2000 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

AWS Certified Solutions Architect - Associate

This course has been developed to provide you with the requisite knowledge to not only pass the AWS CSA certification exam but also gain the hands-on experience required to become a qualified AWS Solutions architect working in a real-world environment.

Question has a verified solution.

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

Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
Suggested Courses

801 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