2010-04-10 27 views
0

這可能是一個簡單的問題,但我正在用DropDownList在C#中開發一個Web應用程序。目前它僅用於一個DropDownList。但是現在我修改了代碼,使得應該出現的DropDownLists的數量是動態的,它給了我錯誤;如何在ASP.NET中動態返回DropDownList選擇?

「 當前上下文中不存在名稱'ddl'。」

此錯誤的原因是有多個'ddl'=計數器數量的實例。那麼我該如何返回多個'ddl'?就像這種方法有什麼返回類型呢?如何返回這些值?

我需要動態的原因是我需要爲他們選擇的任何Adventureworks表中的每列創建一個DropDownList。

 private DropDownList CreateDropDownLists() 
    { 
     for (int counter = 0; counter < NumberOfControls; counter++) 
     { 
      DropDownList ddl = new DropDownList(); 
      SqlDataReader dr2 = ADONET_methods.DisplayTableColumns(targettable); 
      ddl.ID = "DropDownListID" + (counter + 1).ToString(); 

      int NumControls = targettable.Length; 
      DataTable dt = new DataTable(); 
      dt.Load(dr2); 

      ddl.DataValueField = "COLUMN_NAME"; 
      ddl.DataTextField = "COLUMN_NAME"; 
      ddl.DataSource = dt; 
      ddl.ID = "DropDownListID 1"; 
      ddl.SelectedIndexChanged += new EventHandler(ddlList_SelectedIndexChanged); 
      ddl.DataBind(); 

      ddl.AutoPostBack = true; 
      ddl.EnableViewState = true; //Preserves View State info on Postbacks 
      //ddlList.Style["position"] = "absolute"; 
      //ddl.Style["top"] = 80 + "px"; 
      //ddl.Style["left"] = 0 + "px"; 
      dr2.Close(); 
     } 
     return ddl; 
    } 

回答

1

看起來你試圖在函數結束時返回下拉列表,但它在for循環的範圍內聲明。嘗試在函數的開頭創建一個下拉列表(在for循環之前),然後在循環內設置數組然後返回它。您還需要更改函數聲明以支持一系列下拉列表。

private DropDownList[] CreateDropDownLists() 
{ 
    DropDownList[] dropDowns = new DropDownList[NumberOfControls]; 

    for (int counter = 0; counter < NumberOfControls; counter++) 
    { 
     DropDownList ddl = new DropDownList(); 
     SqlDataReader dr2 = ADONET_methods.DisplayTableColumns(targettable); 
     ddl.ID = "DropDownListID" + (counter + 1).ToString(); 

     int NumControls = targettable.Length; 
     DataTable dt = new DataTable(); 
     dt.Load(dr2); 

     ddl.DataValueField = "COLUMN_NAME"; 
     ddl.DataTextField = "COLUMN_NAME"; 
     ddl.DataSource = dt; 
     ddl.ID = "DropDownListID 1"; 
     ddl.SelectedIndexChanged += new EventHandler(ddlList_SelectedIndexChanged); 
     ddl.DataBind(); 

     ddl.AutoPostBack = true; 
     ddl.EnableViewState = true; //Preserves View State info on Postbacks 
     //ddlList.Style["position"] = "absolute"; 
     //ddl.Style["top"] = 80 + "px"; 
     //ddl.Style["left"] = 0 + "px"; 
     dr2.Close(); 

     dropDowns[counter] = ddl; 
    } 
    return dropDowns; 
} 
+0

很好的答案!我用這個解決方案,凱文! – salvationishere 2010-04-10 11:34:50

1

爲什麼不直接返回一個DropDownList的列表?

private List<DropDownList> CreateDropDownLists() 
{ 
    List<DropDownList> listDDL = new List<DropDownList>(); 
    for (int counter = 0; counter < NumberOfControls; counter++) 
    { 
     DropDownList ddl = new DropDownList(); 

     SqlDataReader dr2 = ADONET_methods.DisplayTableColumns(targettable); 
     ddl.ID = "DropDownListID" + (counter + 1).ToString(); 

     int NumControls = targettable.Length; 
     DataTable dt = new DataTable(); 
     dt.Load(dr2); 

     ddl.DataValueField = "COLUMN_NAME"; 
     ddl.DataTextField = "COLUMN_NAME"; 
     ddl.DataSource = dt; 
     ddl.ID = "DropDownListID 1"; 
     ddl.SelectedIndexChanged += new EventHandler(ddlList_SelectedIndexChanged); 
     ddl.DataBind(); 

     ddl.AutoPostBack = true; 
     ddl.EnableViewState = true; //Preserves View State info on Postbacks 
     //ddlList.Style["position"] = "absolute"; 
     //ddl.Style["top"] = 80 + "px"; 
     //ddl.Style["left"] = 0 + "px"; 
     dr2.Close(); 

     listDDL.Add(ddl); 
    } 
    return listDDL; 
} 
+0

您可以將DataReader放在使用區塊中作爲最佳做法。 – 2010-04-10 06:30:47

+0

很好的答案,約翰。比我擁有的更好! – salvationishere 2010-04-10 11:35:29

+0

@salvationishere在技術上我的,約翰簡單地清理格式。 @Ashish好點,我只想指出一個列表可以用來代替。 – spong 2010-04-10 12:34:54

相關問題