2013-09-05 24 views
0

我一直在试图获取动态创建的下拉列表(Page_Load期间)的ID(位于表中),然后在这些下拉列表中找到所选值并存储这些值上按钮click.This表或GridView的是如何分配的ID(在Page_Load事件)我如何获取动态创建的Web控件的ID

  drd.ID = "dbaseid" + rowctr; 
     drd1id[rowctr]=drd1.ID; 

rowctr是索引变量唯一ID分配给每个下拉。

如何从Page_Load获取ID。我试图存储在阵列中的ID,然后使用会话变量:

  drdid[rowctr]=drd.ID; 
     drd1id[rowctr]=drd1.ID; 
     Session["drditem"]=drditem; 
     Session["drd1item"]=drd1item; 

,然后试图获取在ButtonClick事件函数的ID:

  drdid=(string[])Session["drdid"];   
     drd1id=(string[])Session["drd1id"]; 
     string[] a =new string [50]; 
     for(int i =0;i<noodropdowns;i++) 
     { 
      a=drd1id[i]; 
      a.selectedindex//doesnt work !! 
     } 

是否有一种方式来获得真正的ID和然后在他们身上工作? 我新来的asp.net,我很抱歉,如果它听起来noob ish .. 在此先感谢。

+1

为什么不使用他们的'SelectedIndexChanged'事件,然后通过'((DropDownList)sender).Id'获取ID。如果您不将'AutoPostBack'设置为'true',您甚至可以使用此事件。它会触发每个更改的下拉菜单。 –

+0

您好蒂姆感谢您的答复队友。但我怎么能使用'SelectedIndexChanged',当我无法获得id使用它。下拉菜单是在页面载入中创建的,并且同时给出ID。我需要在按钮单击时找到所选项目,以便我可以保存该数据。 – rawatdeepesh

+0

@awatdeepesh:您必须以编程方式添加'SelectedIndexChanged'事件处理程序:'dynDll.SelectedIndexChanged + = OnDropDownListSelectedIndexChanged;'其中'OnDropDownListSelectedIndexChanged'是您的类中处理它的方法。 –

回答

0

实测成功,发现下拉列表和在表中选择从下拉的值被它是在作为well.Here是代码表改变。每次保存所选择的值..

 using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.IO; 
    using System.Data; 
    using System.Data.SqlClient; 
    using System.Data.OleDb; 
    using System.Collections; 
    using System.Web.Security; 
    using System.Text; 
    using System.Configuration; 
    using System.Web.SessionState; 
    using System.Windows; 

    public partial class Default2 : System.Web.UI.Page 
    { 
    Table tblRecipients = new Table(); 
    DropDownList drd = new DropDownList(); 
    DropDownList drd1 = new DropDownList(); 
    protected void Page_Init(object sender, EventArgs e) 
{ 
    DataTable dtt = (DataTable)Session["griddata"]; 
    int n = dtt.Columns.Count; 
    string[] drd1item = new string[n]; 
    string[] excel = new string[n]; 
    for (int i = 0; i < dtt.Columns.Count; i++) 
    { 
     excel[i] = dtt.Columns[i].ColumnName; 
    } 
    Session["exceldata"] = excel; 

    ////saving sql database column names in an array variable 
    DataTable dtt1 = (DataTable)Session["dbasecolumns"]; 
    int l = dtt1.Columns.Count; 
    string[] drditem = new string[l]; 
    string[] sqlcolumn = new string[l]; 
    for (int j = 0; j < dtt1.Columns.Count; j++) 
    { 
     sqlcolumn[j] = dtt1.Columns[j].ColumnName; 
    } 
    Session["sqlcolumn"] = sqlcolumn; 
    Session["l"] = l; 

    //Table Creation 
    Table mytable = new Table(); 
    mytable.Visible = true; 
    mytable.GridLines = GridLines.Both; 
    TableHeaderRow th = new TableHeaderRow(); 
    TableHeaderCell thc = new TableHeaderCell(); 
    TableHeaderCell thc1 = new TableHeaderCell(); 

    mytable.Rows.Add(th); 
    Label lbl1 = new Label(); 
    Label lbl2 = new Label(); 

    lbl1.Text = "Database"; 
    lbl2.Text = "Excel"; 

    thc.Controls.Add(lbl1); 
    thc1.Controls.Add(lbl2); 
    th.Cells.Add(thc); 
    th.Cells.Add(thc1); 


    for (int rowctr = 0; rowctr < sqlcolumn.Length; rowctr++) 
    { 
     TableCell mycell = new TableCell(); 
     TableCell mycell1 = new TableCell(); 

     for (int cellctr = 0; cellctr < 1; cellctr++) 
     { 
      //dropdown with database columns 
      DropDownList drd = new DropDownList(); 
      drd.Items.Insert(0, new ListItem("--Select--", "0")); 
      drd.ID = "dbaseid" + rowctr; 
      for (int i = 0; i < sqlcolumn.Length; i++) 
      { 
       drd.Items.Add(sqlcolumn[i]); 
       drditem[i] = sqlcolumn[i]; 
      } 
      // drd.SelectedIndexChanged+=new EventHandler(drd1_SelectedIndexChanged); 


      //dropdown with excel columns 
      DropDownList drd1 = new DropDownList(); 

      drd1.ID = "excelid" + rowctr; 

      for (int j = 0; j < excel.Length; j++) 
      { 
       drd1.Items.Add(excel[j]); 
       drd1item[j] = excel[j]; 
      } 
      // drd1.SelectedIndexChanged +=new EventHandler (drd1_SelectedIndexChanged); 
      //session variable to store dropdown elements in an array 




      //Table cells and rows addition 
      TableRow myrow = new TableRow(); 
      mycell.Controls.Add(drd); 
      mycell1.Controls.Add(drd1); 
      myrow.Cells.Add(mycell); 
      myrow.Cells.Add(mycell1); 
      mytable.Rows.Add(myrow); 
      mytable.BorderStyle = BorderStyle.Solid; 
     } 
    } 

    DynamicControlsHolder.Controls.Add(mytable); 
} 

    protected void Button1_Click(object sender, EventArgs e) 
{ 
    Table mytable = new Table(); 
    mytable.GridLines = GridLines.Both; 
    string s; 
    foreach (Control ctl in DynamicControlsHolder.Controls) 
    { 
     if (ctl is Table) 
     { 
      Table tblnew = ctl as Table; 
      { 
       foreach (Control ctrl in tblnew.Controls) 
       { 
        if (ctrl is TableRow) 
        { 
         TableRow trow = new TableRow(); 
         TableRow tblrow = ctrl as TableRow; 
         { 

          foreach (Control cntrl in tblrow.Controls) 
          { 
           if (cntrl is TableCell) 
           { 
            TableCell tcell = new TableCell(); 
            TableCell tblcell = cntrl as TableCell; 
            { 
             foreach (Control cntrol in tblcell.Controls) 
             { 
              if (cntrol is DropDownList) 
              { 
               DropDownList myddr = cntrol as DropDownList; 
               if (cntrol != null) 
               { 




                s = myddr.SelectedItem.Text; 
                tcell.Text = s; 


               } 
              } 

             } 

            } 
            trow.Cells.Add(tcell); 
           } 
          } 

         } 

         mytable.Rows.Add(trow); 
        } 
       } 
      } 
     } 
    } 
    DynamicControlsHolder.Controls.Add(mytable); 
} 

}

1

嘿,如果你试图循环GridView中的所有下拉列表并获得下拉列表?

//Add the drop down as following in page load 
drd.ID = "dbaseid"; //do not add dynamic id other wise you will not able to find it. 
        //It client id would be different based upon its position in DOM 


//loop over gridview row and get the control as following 

foreach (GridViewRow row in grid.Rows) 
{ 
    var ddl = row.FindControl("dbaseid") as DropDown; 
    //do what ever with the drop down 
} 
+0

感谢您的回复阿南德。但是我还没有准备好gridview。我需要从下拉列表中找到所选项目(我已经在Page_load中显示了下拉列表),并将这些选定的值用作另一个事件中的表格或GridView标题。 – rawatdeepesh

0

您提到动态创建的下拉列表位于表中。我认为Anand指的是那张表格,而不是你希望用下拉列表的值填充的GridView。因此,您可以尝试循环查看表格的行并获取下拉列表ID。

相关问题