Solved

Datagrid View - Cell Padding and adding an icon

Posted on 2006-07-11
12
1,076 Views
Last Modified: 2008-02-01
Hi there

I have a datagrid view, one column and many rows.  For each cell I want to pad the cell so the text is indented by a few pixels and display a status icon *before* the text.

I thought below was the most obvious to indent a cell:

DataGridView1.DefaultCellStyle.Padding.Left = 80

but I get the error message:  Expression is a value and therefore cannot be the target of an assignment.

And there doesn't seem to be an option to show a background image on a cell :oS

Any ideas?

0
Comment
Question by:DavidGreenfield
  • 6
  • 6
12 Comments
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17086513
1) The Padding property is a structure, so try this instead:
    Me.DataGridView1.DefaultCellStyle.Padding = New Padding(80, 0, 0, 0)

2) Handle the CellPainting to customize a cell:

   Private Sub CellPainter(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
      e.Graphics.DrawImage(Image.FromFile("C:\Windows\Zapotec.bmp"), 0, 0)
   End Sub

Bob
0
 

Author Comment

by:DavidGreenfield
ID: 17088691
Hi Bob

1) works fantastically well!

2) When I tried this the image doesn't appear in all cells, and when I move the scroll bar up and down it seems to add and remove the image randomly against the cells.  How do I stop that happening?

Thanks so far!
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17089938
2) That sounds like the graphics are not persisting.  When you scroll, does the CellPainting event fire?

Bob
0
 

Author Comment

by:DavidGreenfield
ID: 17090337

Yes it does appear that the cell painting is firing each time I scroll
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17090387
Can you show me what you came up with, then?

Bob
0
 

Author Comment

by:DavidGreenfield
ID: 17090517
Not sure I understand

To check it fired I just output the time in the debug window and checked on scrolling that this piece of code was being fired.  Otherwise on moving between screens it also fires - so i can't walk through the code.

The output is exactly the same, on scrolling sometimes the picture is shown, sometimes not.  Because it fires so much I can't tell how many times it fires against each cell on a scroll.  On one mouse click on the scroll there appears to be 2 fires however :oS
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 96

Expert Comment

by:Bob Learned
ID: 17091025
I am sorry for the unclear question.  Can you show me the code that you came up with to solve the problem?  I want to make sure that the implementation is what it needs to be to get the job done correctly.

Bob
0
 

Author Comment

by:DavidGreenfield
ID: 17091712
I have not actually solved the problem yet

I have a split panel with left docking, flexgrid in the top panel.  I am adding data to the grid using

DataGridView1.Rows.Add(menu_xml_node.Attributes.GetNamedItem("title").Value)

then I have the below:

    Private Sub CellPainter(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
        e.Graphics.DrawImage(My.Resources.arrow, 0, 0)
        Debug.Print(System.DateTime.Now())
    End Sub

initially before I have started scrolling only the top row has an image in its cell.  On scrolling they randomly appear in different rows.

Thanks so far






0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17091928
David,

Is the image the only thing in the cell, is there something like text?

Bob
0
 

Author Comment

by:DavidGreenfield
ID: 17092309
Yes there is text in the cell as well.  Will try it without text
0
 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
ID: 17092349
I believe that when you are using the CellPainting, you need to handle the entire cell yourself.

There are methods available through the DataGridViewCellPaintingEventArgs to make this easier, like Paint, PaintBackground, PaintContent.  These allow you to control when each painting step takes places, so that drawing the text doesn't clear the image from the cell.

Bob
0
 

Author Comment

by:DavidGreenfield
ID: 17092374

Nope, doesn't seem to be making a difference.  Have tried it in another grid with no formating etc on and still getting the same problem.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
Introduction When many people think of the WebBrowser (http://msdn.microsoft.com/en-us/library/2te2y1x6%28v=VS.85%29.aspx) control, they immediately think of a control which allows the viewing and navigation of web pages. While this is true, it's a…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…

867 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

23 Experts available now in Live!

Get 1:1 Help Now