Click here to Skip to main content
Click here to Skip to main content

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

, 19 Nov 2005 CPOL
Rate this:
Please Sign up or sign in to vote.
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.

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:

private DataSet    ds = new DataSet("myDs");
private DataTable  dt = new DataTable("myDT");
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:

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:

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)

Share

About the Author

ShahabFatemi

Sweden Sweden
I am not using Microsoft.NET and Crystal report anymore.

Comments and Discussions

 
Questionسلام Pinmembermj010011-May-12 23:44 
GeneralHelp Please PinmemberRobat712-Mar-10 20:48 
QuestionHow to add combo box in to datagrid in 2005 Pinmemberyvarjun3-Dec-08 21:51 
GeneralExactly what I was looking for PinmemberJahmani13-Nov-08 23:49 
QuestionHow can I merge cell in datagrid? PinmemberA-Lexo11-Nov-08 4:28 
GeneralThanks you, very useful PinmemberMember 136869617-Jun-08 19:36 
QuestionHow to add a Control to Listview Pinmembersinghswat15-May-07 2:42 
GeneralGetting rid of the old text on mouse down PinmembercrashedPilot25-Jan-07 0:53 
Generaladding image button to datagrid PinmemberCDHU21-Sep-06 22:42 
GeneralRe: adding image button to datagrid PinmembercrashedPilot25-Jan-07 1:04 
GeneralComboBox with many columns in datagrid PinmemberHemaRawat27-Dec-05 23:45 
GeneralRe: ComboBox with many columns in datagrid Pinmembervivekharnal13-Aug-07 21:15 
GeneralResize controls with the same header width PinmemberRichard Tibang23-Nov-05 4:35 
GeneralRe: Resize controls with the same header width PinmemberJosef Meile23-Nov-05 6:29 
GeneralRe: Resize controls with the same header width PinmembercrashedPilot25-Jan-07 1:16 
GeneralProblem with ordered columns Pinmemberdiegodsp23-Nov-05 2:13 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150123.1 | Last Updated 19 Nov 2005
Article Copyright 2005 by ShahabFatemi
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid