Generating a Combo Box in DATA GRID Columns


DataGrid programming in .NET is real fun. Andthat too if you're trying to get it programmed in a winforms world itsdouble the work. You got to write a whole lot of code for a simpleextensibility of the existing features of datagrid. One good example ishaving a combobox in one of the columns of the datagrid.

A week ago, I needed this feature in one of myassignments. I thought I could grab a couple of clues/lines of codefrom the documentation. But I could'nt find one. I then posted myrequirement at the list and one of the guys over the list pointed me toa sample(http://www.gotdotnet.com/userfiles/Boongieman/DropDownColumn.zip) thatis written in VB.NET.

I sat down to port this code into C#. And Ialso took time in adding couple more features like Updating the changesmade in the grid and moving between records.

pic1 Generating a Combo Box in DATA GRID Columns

The sample uses the SQLServer database. Yougot to change the connection string to your appropriate database. Thetables I am using are

Table Columns
Students Sno(PK), SName, Course(Foreign Key)
Course Course(PK) (Combo Box populates these rows).

I generate a dataset named _StudentDS which is populated with data from both the tables.

sqlDA.Fill(_StudentDS,"Student");
sqlDA.Fill(_StudentDS, "Course");

The .zip file consists of :

If you make any changes, I would appreciate if you send me your piece of work.

Form2 – The form that encapsulates code for the datagrid with combobox as one of its columns and the necessary operations.

SjComboboxDataGrid – is the component thata contains two classes
(a) DataGridCombobox, this derives from Combobox class.
(b) DataGridComboboxColumn this derives from DataGridColumnStyle, whichis an abstract class, which specifies the appearance and textformatting, and behavior of a DataGrid control.

When you bind a datagrid to a datasource, thedatagrid control automatically creates a collection ofDataGridColumnStyle objects. The objects created are actuallyinstantiations of one of the DataGridBoolColumn or DataGridTextBoxclasses that inherit from DataGridColumnStyle. This done by thedatagrid by checking the datatype of the datacolumn its trying topopulate using the GetType( ) method.

You can also create your own set ofDataGridColumnStyle objects like the one I did in the example which hasa combo box in it. When you inherit from DataGridColumnStyle you mustoverride these members Abort, Commit, Edit and Paint(twice). You mustset the MappingName of each column style to the ColumnName of aDataColumn to synchronize the display of columns with actual data.

GridTableStyle.MappingName = "Student";
_CourseDT = _StudentDS.Tables["Course"];

Binding an ordinary column to a DataGridColumnStyle column
GridTableStyle.GridColumnStyles.Add(new DataGrid
TextBoxColumn(objStudentCM .GetItemProperties()["SNo"]));
GridTableStyle.GridColumnStyles[0].MappingName = "SNo";
GridTableStyle.GridColumnStyles[0].HeaderText = "Student No";
GridTableStyle.GridColumnStyles[0].Alignment = HorizontalAlignment.Left;
GridTableStyle.GridColumnStyles[0].NullText = string.Empty;

Binding data to a combobox style column
GridTableStyle.GridColumnStyles.Add(new DataGridComboBoxColumn(_CourseDT,0,0));
GridTableStyle.GridColumnStyles[2].MappingName = "Course";
GridTableStyle.GridColumnStyles[2].HeaderText = "Course";
GridTableStyle.GridColumnStyles[2].Alignment = HorizontalAlignment.Left;
GridTableStyle.GridColumnStyles[2].Width = IntAvgCharWidth * 20;
GridTableStyle.GridColumnStyles[2].NullText = string.Empty;

Download DataGridCombo.zip

Enjoy the code.

References:
www.gotdotnet.com
www.msdn.microsoft.com

Sudhakar Jalli

I am currently working on .NET and its related technologies. You can reach me at sjalli@hotmail.com

Most Commented Articles :

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

No comments yet... Be the first to leave a reply!