Как динамически вернуть выборки DropDownList в ASP.NET? - PullRequest
0 голосов
/ 10 апреля 2010

Это, вероятно, простой вопрос, но я разрабатываю веб-приложение на C # с DropDownList. В настоящее время он работает только для одного DropDownList. Но теперь, когда я изменил код так, чтобы число DropDownLists, которое должно появиться, было динамическим, это дает мне ошибку;

"Имя" ddl "не существует в текущий контекст. "

Причиной этой ошибки является то, что несколько экземпляров 'ddl' = количество счетчиков. Так как же вместо этого вернуть более одного «ddl»? Например, какой тип возврата должен иметь этот метод? И как мне вернуть эти значения?

Причина, по которой мне нужен динамический режим, заключается в том, что мне нужно создать один DropDownList для каждого столбца в любой выбранной ими таблице Adventureworks.

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

Ответы [ 2 ]

1 голос
/ 10 апреля 2010

Почему бы просто не вернуть список 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;
}
1 голос
/ 10 апреля 2010

Похоже, вы пытаетесь вернуть выпадающий список в конце функции, но он объявлен внутри области цикла 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;
}
...