C# 如何在ASP.NET中动态返回DropDownList选择?

C# 如何在ASP.NET中动态返回DropDownList选择?,c#,visual-studio-2008,drop-down-menu,C#,Visual Studio 2008,Drop Down Menu,这可能是一个简单的问题,但我正在用C#和DropDownList开发一个web应用程序。目前它只为一个DropDownList工作。但现在我修改了代码,使应该出现的DropDownLists的数量是动态的,这给了我错误 “文件中不存在名称“ddl” 当前上下文。” 此错误的原因是存在多个“ddl”=计数器数的实例。那么,如何返回多个“ddl”?比如这个方法应该有什么样的返回类型?如何返回这些值 我之所以需要它是动态的,是因为我需要为他们选择的Adventureworks表中的每一列创建一个Dro

这可能是一个简单的问题,但我正在用C#和DropDownList开发一个web应用程序。目前它只为一个DropDownList工作。但现在我修改了代码,使应该出现的DropDownLists的数量是动态的,这给了我错误

“文件中不存在名称“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;
    }
private DropDownList CreateDropDownLists()
{
用于(int计数器=0;计数器
看起来您正试图返回函数末尾的下拉列表,但它是在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;
}
private DropDownList[]CreateDropDownLists()
{
DropDownList[]dropDowns=新的DropDownList[NumberOfControls];
用于(int计数器=0;计数器
为什么不直接返回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;
}
private List CreateDropDownLists()
{
List LISTDL=新列表();
用于(int计数器=0;计数器
您可以将DataReader放在使用块中作为最佳实践。回答得很好,John。比我拥有的更好@从技术上讲,约翰是我的,他只是清理了格式@好的,我只想指出可以用列表代替。回答得很好!我用了这个方法,凯文!