Search code examples
c#winformsdatagridviewtabcontroltabpage

KeyDown and EditControlShowing Event For Dynamic created gridview


On Form I put Tabcontrol with no tabpages and the Declare Variable For DataGridview and TabPage

private DataGridView[] rtb = new DataGridView[100];
private TabPage[] tab = new TabPage[100];

After That I Create a Function Called User Create TabPages And Gridview with columns based on textbox input How many user want

public void ctp(Int32 textbox)
{
    try
    {
        if (textbox > 10)
        {
            MessageBox.Show("You Exceed Limit");
        }
        else
        {
            int k = 0;
            int s = 0;
            tabControl2.TabPages.Clear();
            k = Convert.ToInt32(textBox1.Text);
            for (int i = 0; i < k; i++)
            {
                tab[i] = new TabPage();
                //Start Gridview
                rtb[i] = new System.Windows.Forms.DataGridView();
                rtb[i].Location = new System.Drawing.Point(0, 50);
                rtb[i].Size = new System.Drawing.Size(1020, 150);
                //ID Column
                rtb[i].Columns.Add("tr_id", "ID");
                rtb[i].Columns["tr_id"].ReadOnly = true;
                rtb[i].Columns["tr_id"].Width = 1;
                // Color Column
                rtb[i].Columns.Add("color_no", "Pantone No.");
                //Quantity Column
                rtb[i].Columns.Add("quantity", "Quantity");
                //Piece Weight Column
                rtb[i].Columns.Add("piece_weight", "Piece Weight");
                //Total Weight Carton
                rtb[i].Columns.Add("total_weight", "Total Weight");
                //Piece in Carton Column
                rtb[i].Columns.Add("pcs_carton", "Pcs/Carton");
                //No Of Carton Column
                rtb[i].Columns.Add("no_of_carton", "Total Cartons");
                //Unit Name Column
                rtb[i].Columns.Add("unit_name", "Unit Name");
                //Rate Column
                rtb[i].Columns.Add("rate", "Rate");
                //Amount Column
                rtb[i].Columns.Add("amount", "Amount");
                //Ship Qty Column
                rtb[i].Columns.Add("ship_qty", "Ship Qty.");
                //kdnr column
                rtb[i].Columns.Add("kdnr", "KDNR");
                //reference No Column
                rtb[i].Columns.Add("ref_no", "Reference No.");

                DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
                checkColumn.Name = "deleterow";
                checkColumn.HeaderText = "Delete Row";
                checkColumn.Width = 50;
                checkColumn.ReadOnly = false;
                checkColumn.FillWeight = 10; //if the datagridview is resized (on form resize) the checkbox won't take up too much; value is relative to the other columns' fill values
                rtb[i].Columns.Add(checkColumn);

                tab[i].Controls.Add(rtb[i]);
                tab[i].Location = new System.Drawing.Point(4, 22);
                tab[i].Name = "tab" + i.ToString();
                tab[i].Padding = new System.Windows.Forms.Padding(3);
                tab[i].Size = new System.Drawing.Size(400, 242);
                tab[i].Text = "Article" + i.ToString();
                tab[i].UseVisualStyleBackColor = true;
                tabControl2.TabPages.Add(tab[i]);

                //MessageBox.Show(""+tab[i].Text);
            }

        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

After That This Function Call On TextBox KeyDown Event

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
#region Calling Create TabPage Function
    try
    {
        if (e.KeyCode == Keys.Enter)
        {
            Int32 textbox = Convert.ToInt32(textBox1.Text);
            ctp(textbox);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
#endregion
}

This Code Work Perfectly My Question is that when I have 2 gridview which will create by user dynamically so how to access the gridview Events Like KeyDown,EditControlShowing etc. etc.


Solution

  • Do you want like this

     DataGridView[] rtb = new DataGridView[100];
                 for (int i = 0; i < 1; i++)
                 {
                                    //Start Gridview
                     rtb[i] = new System.Windows.Forms.DataGridView();
                     rtb[i].Location = new System.Drawing.Point(0, 50);
                     rtb[i].Size = new System.Drawing.Size(1020, 150);
                     //ID Column
                     rtb[i].Columns.Add("tr_id", "ID");
                     rtb[i].Columns["tr_id"].ReadOnly = true;
                     rtb[i].Columns["tr_id"].Width = 1;
                     rtb[i].KeyDown += new KeyEventHandler(xKeyEvent);
                     this.Controls.Add(rtb[i]);
                 }
    

    Key Down Event

     private void xKeyEvent(object sender, KeyEventArgs e)
            {
                MessageBox.Show("hi");
            }