Solved

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

Posted on 2012-04-11
6
4,087 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
MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

 

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

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

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

It seems a simple enough task, yet I see repeated questions asking how to do it: how to pass data between two forms. In this article, I will show you the different mechanisms available for you to do just that. This article is directed towards the .N…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Are you ready to implement Active Directory best practices without reading 300+ pages? You're in luck. In this webinar hosted by Skyport Systems, you gain insight into Microsoft's latest comprehensive guide, with tips on the best and easiest way…

739 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