Click here to Skip to main content
15,885,216 members
Articles / Programming Languages / C#
Article

How to add other controls to DataGrid - (Part I )

Rate me:
Please Sign up or sign in to vote.
4.81/5 (25 votes)
19 Nov 2005CPOL 189.1K   9K   92   17
How to add other controls to DataGrid?

Introduction

I always wanted to know how to use controls such as TextBox, ComboBox, RadioButton, Button etc. in a DataGrid cell. You can also fire their events easily. Nowadays it's very simple to do this! You must create a DataGridTableStyle and add a DataGridTextboxColumns to it. After that, you can add each control you want to the DataGridTextboxColumns.

C#
TextBox txtBox = new TextBox();
datagridTextBoxColumn.TextBox.Controls.Add( txtBox );

Now, let me describe my sample. First, I design a DataTable and fill my DataGrid with it:

C#
private DataSet    ds = new DataSet("myDs");
private DataTable  dt = new DataTable("myDT");
C#
private void FillData()
{
    //Add datatable object to dataset object.
    ds.Tables.Add(dt);

    //Create a new column for datatable.
    DataColumn dc = new DataColumn("Label_Col" , 
                    System.Type.GetType("System.String"));
    //Add created column to datatable object.
    dt.Columns.Add(dc);

    //Create a new column for datatable.
    dc = new DataColumn("TextBox_Col" , 
             System.Type.GetType("System.String"));
    //Add created column to datatable object.
    dt.Columns.Add(dc);    

    //Create a new column for datatable.
    dc = new DataColumn("ComboBox_Col", 
             System.Type.GetType("System.String"));
    //Add created column to datatable object.
    dt.Columns.Add(dc);
    
    //Add new row to datatble.
    DataRow dr;
    for(int i=1; i<=5; i++)
    {
        dr                 = dt.NewRow();
        dr["Label_Col"]    = "lable"+i.ToString();
        dr["TextBox_Col"]  = "textbox"+i.ToString();
        dr["ComboBox_Col"] = "combobox"+i.ToString();
        dt.Rows.Add(dr);
    }
}

After you load data in your DataGrid and design its DataGridTableStyle, you must write this code in the MouseUp event of DataGrid:

C#
hitTestGrid = dataGrid.HitTest(e.X, e.Y);
if(hitTestGrid != null)
{
    //Which column of datagrid has been clicked.
    switch(hitTestGrid.Column)
    {
        case 0:
          //Add label control to datagrid.
          dataGridLable.TextBox.Controls.Add( lblControl );
          lblControl.Text = 
             dataGrid[dataGrid.CurrentRowIndex , 0].ToString();
          break;
        
        case 1:
          //Add texbox control to datagrid.
          dataGridTextBox.TextBox.Controls.Add( txtControl );
          txtControl.Text = 
              dataGrid[dataGrid.CurrentRowIndex , 1].ToString();
          txtControl.Focus();
          break;
        
        case 2:
          //Add combobox control to datagrid.
          dataGridComboBox.TextBox.Controls.Add( cboControl );

          for(int i=0; i<CBOCONTROL.ITEMS.COUNT; pre }< } break; 
           cboControl.SelectedIndex="i;" 2].ToString()) , 
           dataGrid[dataGrid.CurrentRowIndex if(
               cboControl.Items[i].ToString()="=" { i++)>

You can initialize your controls, which will be added to the DataGrid, and fire their events:

C#
private void InitializeControls()
{
    //label property
    lblControl.Cursor    = Cursors.Hand;
    lblControl.ForeColor = Color.Red;
    lblControl.Font      = new Font("Arial", 12, 
                           FontStyle.Bold | FontStyle.Italic);

    //textbox property
    txtControl.Cursor    = Cursors.Hand;
    txtControl.BackColor = Color.WhiteSmoke;
    txtControl.ForeColor = Color.DarkSlateBlue;
    txtControl.Font      = new Font("Arial", 8, FontStyle.Bold);
    
    //textbox events.
    txtControl.TextChanged+=new EventHandler(txtTextChanged);

    //Define and add ComboBox rows, will be added to data grid.
    for(int i=1;    i<=5;    i++)
        cboControl.Items.Add("combobox"+i.ToString());

    //combobox property
    cboControl.Cursor        = Cursors.Hand;
    cboControl.DropDownStyle = ComboBoxStyle.DropDownList;
    //combobox events.
    cboControl.SelectedIndexChanged+=
    new EventHandler(cboSelectedIndexChanged);
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Sweden Sweden
I am not using Microsoft.NET and Crystal report anymore.
I moved from computer science to space science in 2008. Currently I'm a researcher in space plasma physics in Sweden. I apologize if I cannot reply your emails/messages anymore. This is because I am not using Windows and any of the Microsoft products.

Comments and Discussions

 
QuestionDisable arrow keys when datagridview cell is in eidt mode. Pin
Member 142245589-Feb-23 20:45
Member 142245589-Feb-23 20:45 
Questionسلام Pin
mj010011-May-12 22:44
mj010011-May-12 22:44 
GeneralHelp Please Pin
Robat712-Mar-10 19:48
Robat712-Mar-10 19:48 
I did not understand very well, it seems somthing is missing in the code, can somebody help me please in this matter?

thank you in advance for your time
QuestionHow to add combo box in to datagrid in 2005 Pin
yvarjun3-Dec-08 20:51
yvarjun3-Dec-08 20:51 
GeneralExactly what I was looking for Pin
Muigai Mwaura13-Nov-08 22:49
Muigai Mwaura13-Nov-08 22:49 
QuestionHow can I merge cell in datagrid? Pin
A-Lexo11-Nov-08 3:28
A-Lexo11-Nov-08 3:28 
GeneralThanks you, very useful Pin
Member 136869617-Jun-08 18:36
Member 136869617-Jun-08 18:36 
QuestionHow to add a Control to Listview Pin
singhswat15-May-07 1:42
singhswat15-May-07 1:42 
GeneralGetting rid of the old text on mouse down Pin
crashedPilot24-Jan-07 23:53
crashedPilot24-Jan-07 23:53 
Generaladding image button to datagrid Pin
CDHU21-Sep-06 21:42
CDHU21-Sep-06 21:42 
GeneralRe: adding image button to datagrid Pin
crashedPilot25-Jan-07 0:04
crashedPilot25-Jan-07 0:04 
GeneralComboBox with many columns in datagrid Pin
HemaRawat27-Dec-05 22:45
HemaRawat27-Dec-05 22:45 
GeneralRe: ComboBox with many columns in datagrid Pin
vivekharnal13-Aug-07 20:15
vivekharnal13-Aug-07 20:15 
GeneralResize controls with the same header width Pin
Richard T.23-Nov-05 3:35
Richard T.23-Nov-05 3:35 
GeneralRe: Resize controls with the same header width Pin
Josef Meile23-Nov-05 5:29
Josef Meile23-Nov-05 5:29 
GeneralRe: Resize controls with the same header width Pin
crashedPilot25-Jan-07 0:16
crashedPilot25-Jan-07 0:16 
GeneralProblem with ordered columns Pin
diegodsp23-Nov-05 1:13
diegodsp23-Nov-05 1:13 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.