?
Solved

I need help developing a Custom DataGridView control in C#

Posted on 2009-04-14
2
Medium Priority
?
752 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

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

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

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an anti-spam), the admin…
This video tutorial shows you the steps to go through to set up what I believe to be the best email app on the android platform to read Exchange mail.  Get the app on your phone: The first step is to make sure you have the Samsung Email app on your …
Suggested Courses

621 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