Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

DatagridView Cell border style based on cell contents in C#.

Posted on 2012-04-11
6
Medium Priority
?
4,403 Views
Last Modified: 2012-06-21
I need to change the cell borders in a datagridview based on it's content. I've figured out how to change the background color but I can't access the border style...

for (int i = 0; i < this.gamesDataGridView.Rows.Count; i++)
                {
                    string cellValue = gamesDataGridView[COL_ID_GAME_TYPE, i].Value.ToString();
                    if (cellValue == "3")
                    {
                        //adjust background color
                        this.gamesDataGridView[COL_ID_4Q, i].Style.BackColor = Color.LightSlateGray;
                        // adjust border style to sunken?

                    }
                }
0
Comment
Question by:boukaka
[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
  • 5
6 Comments
 
LVL 2

Expert Comment

by:yogsoft
ID: 37836088
You can use cell's CssClass property and set background-color inside css class.

Alternately, you can below code.

this.gamesDataGridView[COL_ID_4Q, i].Style.Add("background-color", "#FFF000");

Open in new window


Change the color code to whatever color you want.

Also add below line to change border style

this.gamesDataGridView[COL_ID_4Q, i].Style.Add("border", <border setting value>);

Open in new window

0
 

Author Comment

by:boukaka
ID: 37837463
I forgot to mention that this is a Windows Form so CSS and Style.Add are not an option....
0
 

Author Comment

by:boukaka
ID: 37837568
I did find this class online that looks like it would do what I want but I don't know how to apply it to my cell. I'm relatively new to C# ....

 class CustomDataGridViewCell : DataGridViewTextBoxCell
    {
        private DataGridViewAdvancedBorderStyle _style;

        public CustomDataGridViewCell() : base()
        {
            _style = new DataGridViewAdvancedBorderStyle();
            _style.Bottom = DataGridViewAdvancedCellBorderStyle.Inset;
            _style.Top = DataGridViewAdvancedCellBorderStyle.Inset;
            _style.Left = DataGridViewAdvancedCellBorderStyle.Inset;
            _style.Right = DataGridViewAdvancedCellBorderStyle.Inset;
        }

        public DataGridViewAdvancedBorderStyle AdvancedBorderStyle
        {
            get { return _style; }
            set
            {
                _style.Bottom = value.Bottom;
                _style.Top = value.Top;
                _style.Left = value.Left;
                _style.Right = value.Right;
            }
        }

        protected override void PaintBorder(Graphics graphics, Rectangle clipBounds, Rectangle bounds, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle)
        {
            base.PaintBorder(graphics, clipBounds, bounds, cellStyle, _style);
        }

        protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
        {
            base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, _style, paintParts);
        }

    }
0
NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

 

Author Comment

by:boukaka
ID: 37838881
Well I managed to get my function to work and now these four cells have borders and look like text boxes.

this.gamesDataGridView[COL_ID_1Q, i] = new CustomDataGridViewCell();
this.gamesDataGridView[COL_ID_2Q, i] = new CustomDataGridViewCell();
this.gamesDataGridView[COL_ID_3Q, i] = new CustomDataGridViewCell();
this.gamesDataGridView[COL_ID_4Q, i] = new CustomDataGridViewCell();

but now I have a slightly different problem, when I click in the cell the borders disappear, then I click the next cell and the borders of the original cell come back but the bottom border is missing. This happens for every cell that I click in. How do I keep the borders from disappearing?
0
 

Accepted Solution

by:
boukaka earned 0 total points
ID: 37839868
I figured it out but the solution is a bit odd. I changed the border style on the bottom and right to Outset rather than Inset and now everything looks fine.
0
 

Author Closing Comment

by:boukaka
ID: 37854971
I found the solution myself and posted it as well.
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

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

The object model of .Net can be overwhelming at times – so overwhelming that quite trivial tasks often take hours of research. In this case, the task at hand was to populate the datagrid from SQL Server database in Visual Studio 2008 Windows applica…
Recently while returning home from work my wife (another .NET developer) was murmuring something. On further poking she said that she has been assigned a task where she has to serialize and deserialize objects and she is afraid of serialization. Wha…
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

721 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