Click here to Skip to main content
15,868,030 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 188.9K   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 
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.