2013-03-13 82 views
1

Hiiii,如何獲得動態生成控件的ID?

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

使用dropdownlist中沒有的值創建onclick「create table」按鈕。的行作爲值。

我怎樣才能得到特定的「文件上傳」&「上傳」按鈕的ID。

只需單擊「上載」按鈕,即可訪問與該按鈕相同行中的文件上載控件&它不應該遍歷表中的所有文件上載控件。

enter image description here

在我的代碼,當我點擊下排(說第3行)上傳按鈕,然後在上傳文件上傳上選擇控制文件(這裏第一次ñ第二排與第三排一起)也。

我不想要這個。我只想從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幫助我出去! Thanx in Advance ...

+1

請你的代碼塊減少到只顯示相關的部分? – AbZy 2013-03-13 17:24:29

+0

所有這些文件上傳控件的格式都是相同的,因此它們都將同時提交。這就是HTML表單的工作原理。至於識別哪個特定的按鈕被點擊,我相信你的點擊處理程序可能能夠識別它,但我沒有詳細的「如何」(我應該在發送者對象中)。 – ThatBlairGuy 2013-03-13 17:27:00

回答

0

爲什麼不在按鈕的command參數中存儲行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 
    } 

希望這有助於

相關問題