?
Solved

I need help developing a Custom DataGridView control in C#

Posted on 2009-04-14
2
Medium Priority
?
791 Views
Last Modified: 2013-12-17
I want all the DataGridViews in my program to have nearly identical appearance behavior. What strategy accomplishes this in a way that maximizes code reuse and is easy to maintain? I think that I need some help expanding my fundamental understanding of how controls work in C#.

Here is a more specific description of my issue I have a rich client C# application with multiple datagridviews. All the datagridvews need to have nearly the same behavior and the same appearance. I have tried a few things to reduce the amount of duplicate code.

Initially I created a "Visual Appearance" class to handle the look and feel of row headers etc. I use it by sending the datagridview through a static "FormatDataGridview" method. That worked for awhile, but I began to notice I needed to doubleclick cells to access the drop downs. I only want my users to need to single click. I found code on the internet which gives me the behavior I want:
When user single clicks on a cell, DataGridView.CellEnter event is raised. Use the DataGridView.BeginEdit() method to put the current selected cell into EditMode.

Code Snippet
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    dataGridView1.BeginEdit(false);
    if (e.ColumnIndex == 0)// the combobox column index
    {
        if (this.dataGridView1.EditingControl != null
            && this.dataGridView1.EditingControl is ComboBox)
        {
            ComboBox cmb = this.dataGridView1.EditingControl as ComboBox;
            cmb.DroppedDown = true;
        }
    }
}

I want all my DataGridView controls to have this behavior but I do not want to write this code 10x, so I put it into my local control library. I wont need to rewrite it, but I will need to manually add a reference to this function for each datagridview. My thought is that this approach will be difficult to maintain. I also thought about inheritance, but I was not sure how this would work in the context of controls. ( I did something like this before with unsatisfactory results)

Feeling ambitius, I decided to see if writing a custom control might accomplish what  I want. So I went on the web and found a tutorial that I  felt I could follow. This one seemed user friendly:
http://knol.google.com/k/dave-andrews/creating-custom-controls-with-c-net/617czubfqh7e/2#

When I started to add my behaviors I found that all the methods called by the control are static, and the code I need to add is not static. So I feel stymied.

Please let me know if more information and/or code snippents would help you answer my questions.

Thanks!

Matt





0
Comment
Question by:mattjankowski
2 Comments
 
LVL 96

Accepted Solution

by:
Bob Learned earned 2000 total points
ID: 24148382
It sounds like you could use the DataGridView.EditMode:

DataGridView.EditMode
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.editmode.aspx

DataGridViewEditMode Enumeration
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridvieweditmode.aspx

EditOnEnter
---------------
Editing begins when the cell receives focus. This mode is useful when pressing the TAB key to enter values across a row, or when pressing the ENTER key to enter values down a column.  
0
 

Author Closing Comment

by:mattjankowski
ID: 31569989
Use of the DataGridView.EditMode resolved my issue, saving me a ton of programming. Thanks!
0

Featured Post

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
Hello there! As a developer I have modified and refactored the unit tests which was written by fellow developers in the past. On the course, I have gone through various misconceptions and technical challenges when it comes to implementation. I would…
Hi, this video explains a free download that you can incorporate into your Access databases, or use stand-alone for contact management. Contacts -- Names, Addresses, Phone Numbers, eMail Addresses, Websites, Lists, Projects, Notes, Attachments…
Did you know PowerShell can save you time with SaaS platforms? Simply leverage RESTfulAPIs to build your own PowerShell modules. These will kill repetitive tickets and tabs, using the command Invoke-RestMethod. Tune into this webinar to learn how…

568 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