简体   繁体   English

如何获取动态生成的控件的ID?

[英]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. 如何获取特定的“文件上传”和“上传”按钮的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. 在我的代码中,当我单击较低行(例如第三行)中的“ Upload”(上传)按钮时,它也将在较高文件上传控件(此处为1st n第二行和3rd行)中选择的文件上传。

I don't want this. 我不要这个 I just want to upload file from filupload control in the same row of clicked button. 我只想从filupload控件的单击按钮的同一行中上传文件。

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 为什么不在按钮的命令参数中存储行ID,然后单击按钮时,就可以使用它在所有行之间循环,直到ID与您要查找的行匹配为止。

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 希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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