简体   繁体   中英

How can I get ID's of Dynamically generated Controls?

Hiiii,

In the following image the table & controls in it are generated dynamically.

Table is created onclick of "create table" button using values from dropdownlist which has no. of rows as values.

How can I get particular “Fileupload” & “Upload” button's ID.

On click of “upload” button only fileupload control in same row as of that button should be accessed & it should not loop through all the fileupload controls in the table.

在此处输入图片说明

In my code, when I click Upload button in lower rows(say 3rd row) then it uploads the file selected in upper fileupload controls( here 1st n 2nd row along with 3rd row ) also.

I don't want this. I just want to upload file from filupload control in the same row of clicked button.

CODE :

public partial class stable : System.Web.UI.Page
{
private int tblRow;
private int tblCol = 9;
private int i, j;
private bool CTflag;

Table table = new Table();
TableRow row,rrow;
TableCell cell,rcell;
FileUpload fileUp;
Button UpLdButton;
Button btnCal;
TextBox tb;

Label tbr;

string cmdArg; // for passing filuploaders id with Command button

private string filename = "fileUpLoader";

private string tbRowId = "row";
private string tbColId = "col";

protected int Rows
{
    get
    {
        return ViewState["Rows"] != null ? (int)ViewState["Rows"] : 0;
    }
    set
    {
        ViewState["Rows"] = tblRow;
    }
}

// Columns property to hold the Columns in the ViewState
protected int Columns
{
    get
    {
        return ViewState["Columns"] != null ? (int)ViewState["Columns"] : 0;
    }
    set
    {
        ViewState["Columns"] = tblCol;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {            
        if (CTflag == false)
        {
            this.Rows = tblRow;
            this.Columns = tblCol;                
            CreateDynamicTable();                
        }
        else
        {                
            CTflag = true;                
        }
    }
    //LoadViewState(object this);
    //CreateDynamicTable();
}
protected void Button1_Click(object sender, EventArgs e)
{        
    clrControls();
    CreateDynamicTable(); 
}

protected void CreateDynamicTable()
{        
    tblRow = Convert.ToInt32(DropDownList1.SelectedValue);

    //Creat the Table and Add it to the Page    
    if (CTflag == false)
    {            
        table.Caption = "Challan Entry";
        table.ID = "Challan Entry";
        table.BackColor = System.Drawing.Color.BurlyWood;
        Page.Form.Controls.Add(table);

        // Now iterate through the table and add your controls
        for (i = 0; i < 1; i++)
        {
            row = new TableRow();
            row.BorderStyle = BorderStyle.Ridge;

            for (j = 0; j <= tblCol; j++)
            {
                cell = new TableCell();
                cell.BorderWidth = 5;
                cell.BorderStyle = BorderStyle.Ridge;
                cell.BorderColor = System.Drawing.Color.Azure;
                for (j = 0; j <= tblCol; j++)
                {
                    string[] Header = { "CC NO.", "DATE", "TotalAmt", "NoOfRecpt", "Energy", "New", "Theft", "Misc", "SelectFile", "Upload", "Status" };
                    Label lbl = new Label();
                    lbl.ID = "lblHeader" + j;
                    if (j == 8)
                    {
                        lbl.Width = 220;
                    }
                    else if (j == 9)
                    {
                        lbl.Width = 50;
                    }
                    else
                    {
                        lbl.Width = 100;
                    }
                    lbl.Text = Header[j];

                    // Add the control to the TableCell
                    cell.Controls.Add(lbl);
                }
                row.Cells.Add(cell);
            }

            // Add the TableRow to the Table
            table.Rows.Add(row);
        }
        for (i = 0; i < tblRow; i++)
        {
            row = new TableRow();
            row.ID = tbRowId + i;
            row.BorderStyle = BorderStyle.Ridge;

            for (j = 0; j <= tblCol; j++)
            {
                cell = new TableCell();
                cell.ID = tbColId + i + j;
                cell.BorderWidth = 5;
                cell.BorderStyle = BorderStyle.Ridge;
                cell.BorderColor = System.Drawing.Color.Azure;
                for (j = 0; j <= 0; j++)
                {
                    Label lbl = new Label();
                    lbl.ID = "lblCCRow" + i + "Col" + j;
                    lbl.Text = "CC NO. " + i + " ";
                    lbl.Width = 100;
                    // Add the control to the TableCell
                    cell.Controls.Add(lbl);
                }
                for (j = 1; j <= 1; j++)
                {
                    Label lbl = new Label();
                    lbl.ID = "lblRow" + i + "Col" + j;
                    lbl.Width = 100;
                    lbl.Text = Convert.ToString(DateTime.Now.Day) + "/" + Convert.ToString(DateTime.Now.Month) + "/" + Convert.ToString(DateTime.Now.Year);
                    // Add the control to the TableCell
                    cell.Controls.Add(lbl);
                }
                for (j = 2; j <= 7; j++)
                {
                    tb = new TextBox();
                    tb.Width = 100;
                    tb.ID = "txtBoxRow" + i + "Col" + j;
                    //txtbxNames[i,j] = Convert.ToString(tb.ID);
                    tb.Text = "0";
                    // Add the control to the TableCell
                    cell.Controls.Add(tb);
                }
                for (j = 8; j <= 8; j++)
                {
                    fileUp = new FileUpload();
                    //m = i; n = j;
                    fileUp.ID = filename + i + j;
                    fileUp.Width = 220;
                    cell.Controls.Add(fileUp);
                    cmdArg = fileUp.ID;

                    UpLdButton = new Button();
                    UpLdButton.Width = 100;
                    UpLdButton.Text = "Upload" + i + j;
                    UpLdButton.ID = UpLdButton.Text;
                    UpLdButton.CommandArgument= cmdArg;
                    cell.Controls.Add(UpLdButton);

                    UpLdButton.Click += new EventHandler(UpLdButton_Click);
                }
                for (j = 9; j <= 9; j++)
                {
                    Label lbl = new Label();
                    lbl.ID = "lblRow" + i + j;
                    lbl.Text = "[ Status ]";
                    lbl.Width = 100;
                    // Add the control to the TableCell
                    cell.Controls.Add(lbl);
                }
                row.Cells.Add(cell);
            }
            // Add the TableRow to the Table
            table.Rows.Add(row);
        } //outer for-loop end

        for (i = 0; i < 1; i++)
        {
            rrow = new TableRow();
            rrow.ID = "ResultRow";
            rrow.BorderStyle = BorderStyle.Ridge;                

            for (j = 0; j <= tblCol; j++)
            {
                rcell = new TableCell();
                rcell.ID = "resultCol" + j;
                rcell.BorderWidth = 5;
                rcell.BorderStyle = BorderStyle.Ridge;
                rcell.BorderColor = System.Drawing.Color.Azure;
                for (j = 0; j <= 0; j++)
                {
                    Label lbl = new Label();
                    //lbl.ID = "lblCCRow" + i + "Col" + j;
                    lbl.Text = "<b>Total</b>";
                    lbl.Width = 100;
                    // Add the control to the TableCell
                    rcell.Controls.Add(lbl);
                }
                for (j = 1; j <= 1; j++)
                {
                    Label lbl = new Label();
                    //lbl.ID = "lblRow" + i + "Col" + j;
                    lbl.Width = 100;
                    lbl.Text = Convert.ToString(DateTime.Now.Day) + "/" + Convert.ToString(DateTime.Now.Month) + "/" + Convert.ToString(DateTime.Now.Year);
                    // Add the control to the TableCell
                    rcell.Controls.Add(lbl);
                }
                for (j = 2; j <= 7; j++)
                {
                    tbr = new Label();
                    tbr.Width = 100;
                    tbr.ID = "txtResult" +i+j;                        
                    tbr.Text = tbr.ID;
                    tbr.EnableTheming = true;
                    tbr.BackColor = System.Drawing.Color.White;
                    //txtResNames[i, j] = Convert.ToString(tbr.ID);
                    // Add the control to the TableCell
                    rcell.Controls.Add(tbr);
                }
                for (j = 8; j <= 8; j++)
                {
                    btnCal = new Button();
                    btnCal.Width = 100;
                    btnCal.Text = "Calculate";
                    btnCal.ID = btnCal.Text;                        
                    rcell.Controls.Add(btnCal);
                    btnCal.Click += new EventHandler(btnCal_Click);
                }

                rrow.Cells.Add(rcell);
            }

            // Add the TableRow to the Table
            table.Rows.Add(rrow);
        }

        //flag seetting
        CTflag = true;
        ViewState["dynamictable"] = true;
    }
}

void btnCal_Click(object sender, EventArgs e)
{
    TextBox tbres = new TextBox();
    TextBox tbTemp = new TextBox();

    double TotAmt = 0, NoofRect = 0, Energy = 0,New1 = 0, Theft = 0, Misc = 0;
    for (int i = 0; i < tblRow; i++)
    {
        for (int j = 2; j <= 7; j++)
        {
            TextBox tb = (TextBox)FindControlRecursive(this, string.Format("txtBoxRow{0}Col{1}", i, j));
            Label tbr = (Label)FindControlRecursive(this, string.Format("txtResult{0}{1}", 0, j));
            switch (j)
            {
                case 2:
                    TotAmt += Convert.ToDouble(tb.Text);
                    Label1.Text = Convert.ToString(TotAmt);
                    tbr.Text = Convert.ToString(TotAmt);
                    break;
                case 3:
                    NoofRect += Convert.ToDouble(tb.Text);
                    //Label1.Text = Convert.ToString(NoofRect);
                    tbr.Text = Convert.ToString(NoofRect);
                    break;
                case 4:
                    Energy+= Convert.ToDouble(tb.Text);
                    //Label1.Text = Convert.ToString(TotAmt);
                    tbr.Text = Convert.ToString(Energy);
                    break;
                case 5:
                    New1+= Convert.ToDouble(tb.Text);
                    //Label1.Text = Convert.ToString(TotAmt);
                    tbr.Text = Convert.ToString(New1);
                    break;
                case 6:
                    Theft+= Convert.ToDouble(tb.Text);
                    //Label1.Text = Convert.ToString(TotAmt);
                    tbr.Text = Convert.ToString(Theft);
                    break;
                case 7:
                    Misc+= Convert.ToDouble(tb.Text);
                    //Label1.Text = Convert.ToString(TotAmt);
                    tbr.Text = Convert.ToString(Misc);
                    break;                    
            }
        }
    }        
}

protected void clrControls()
{
    Label1.Text = "";
    for (int i = 0; i < tblRow; i++)
    {
        for (int j = 2; j <= 7; j++)
        {
            fileUp = (FileUpload)FindControlRecursive(this, string.Format("fileUpLoader{0}{1}", i, 8));
            fileUp.Enabled = true;
            Button btn = (Button)FindControlRecursive(this, string.Format("Upload{0}{1}", i, 8));
            btn.Enabled=true;
            TextBox tb = (TextBox)FindControlRecursive(this, string.Format("txtBoxRow{0}Col{1}", i, j));
            tb.Text = "0";
            Label tbr = (Label)FindControlRecursive(this, string.Format("txtResult{0}{1}", 0, j));
            tbr.Text = "0";
            Label statlbl = new Label();
            statlbl = (Label)FindControlRecursive(this, string.Format("lblRow{0}{1}", i, 9));
            statlbl.Text = "[status]";
        }
    }
    for (i = 0; i < 1; i++)
    {
        for (j = 8; j <= 8; j++)
        {
            btnCal.Enabled = true;
        }
    }
}

protected override void LoadViewState(object earlierState)
{
    base.LoadViewState(earlierState);
    if (ViewState["dynamictable"] == null)
    {
        CreateDynamicTable();            
    }        
}

void UpLdButton_Click(object sender, EventArgs e)
{
    Button btnUpLD = sender as Button;

    for (int i = 0; i < tblRow; i++)
    {
        Button tb = (Button)FindControlRecursive(this, string.Format("Upload{0}{1}", i, 8));
        fileUp = (FileUpload)FindControlRecursive(this, string.Format("fileUpLoader{0}{1}", i, 8));
        Label statlbl = new Label();            
        statlbl = (Label)FindControlRecursive(this, string.Format("lblRow{0}{1}", i, 9));            
        if (!fileUp.HasFile)
        {
            //statlbl.Text = "[status]";
            continue;
        }
        else
        {                
            UploadFile(fileUp,tb);
            if (tb.Enabled == true && fileUp.Enabled == true)
            {
                statlbl.Text = "[status]";
            }
            else
            {
                statlbl.Text = "Uploaded";
            }                
        }        
    }            
}    

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
}

public static Control FindControlRecursive(Control root, string id)
{
    if (root.ID == id)
    {
        return root;
    }

    foreach (Control c in root.Controls)
    {
        Control t = FindControlRecursive(c, id);
        if (t != null)
        {
            return t;
        }
    }
    return null;
}

protected void UploadFile(FileUpload xyz, Button btn)
{        
    if (xyz.HasFile)
    {
        string extension = System.IO.Path.GetExtension(xyz.FileName);
        if (extension == ".dat" || extension == ".B60")
        {
            if (File.Exists(Server.MapPath("~\\") + xyz.FileName))
            {
                Label1.Text = "File " + xyz.FileName + " Already Exists!";
            }
            else
            {
                xyz.PostedFile.SaveAs(Server.MapPath("~\\") + xyz.FileName);
                Label1.Text = "The " + xyz.FileName + " Has been uploaded";
                btn.Enabled = false;
                xyz.Enabled = false;
            }
        }
        else
        {
            Label1.Text = "* You can select only '.dat' & '.B60' type files";
            btn.Enabled = true;
            xyz.Enabled = true;
        }            
    }
    else 
    {        
        Label1.Text = "Select a file";
    }        
}   
}

plz Help me Out !!! Thanx in Advance...

why not store a Row ID in the command argument for the button and then when the button is click you can use this to loop through all the rows untill the id matchs the row you are looking for, for example

foreach (DateRow test in table.Rows)
  if ((test.findcontrol(uploadbutton) as Button).commandArgument = (Sender as Button).commandArgumrnt 
{
    //do stuff here 
}
    else
    {
    \\ do nothing
    }

Hope this helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM