簡體   English   中英

如何獲取動態生成的控件的ID?

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

嗨,

在下圖中,表和控件是動態生成的。

使用沒有下拉列表的值在“創建表”按鈕上單擊創建表。 行作為值。

如何獲取特定的“文件上傳”和“上傳”按鈕的ID。

單擊“上載”按鈕后,僅應訪問與該按鈕相同的行中的文件上載控件,並且不應循環訪問表中的所有文件上載控件。

在此處輸入圖片說明

在我的代碼中,當我單擊較低行(例如第三行)中的“ Upload”(上傳)按鈕時,它也將在較高文件上傳控件(此處為1st n第二行和3rd行)中選擇的文件上傳。

我不要這個 我只想從filupload控件的單擊按鈕的同一行中上傳文件。

代碼:

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";
    }        
}   
}

請幫我! 提前感謝...

為什么不在按鈕的命令參數中存儲行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
    }

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM