Link to home
Start Free TrialLog in
Avatar of boukaka
boukakaFlag for Canada

asked on

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

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?

                    }
                }
Avatar of yogsoft
yogsoft
Flag of India image

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

Avatar of boukaka

ASKER

I forgot to mention that this is a Windows Form so CSS and Style.Add are not an option....
Avatar of boukaka

ASKER

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);
        }

    }
Avatar of boukaka

ASKER

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?
ASKER CERTIFIED SOLUTION
Avatar of boukaka
boukaka
Flag of Canada image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of boukaka

ASKER

I found the solution myself and posted it as well.