Solved

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

Posted on 2012-04-11
6
3,709 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
  • 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
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 

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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
A basic question.. “What is the Garbage Collector?” The usual answer given back: “Garbage collector is a background thread run by the CLR for freeing up the memory space used by the objects which are no longer used by the program.” I wondered …
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

757 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now