ASPxCombobox не извлекается из источника данных SQL, сохраненного в сеансе - PullRequest
0 голосов
/ 30 марта 2012
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["SavedSQLSources"] == null)
                SavedSQLSources = new Dictionary<String, SqlDataSource>();

            SavedSQLSources.Add(ASPxComboBox1.ID, SqlDataSource1);
            SavedSQLSources.Add(ASPxComboBox2.ID, SqlDataSource2);

            Session["SavedSQLSources"] = SavedSQLSources;
        }
        else
        {
            if (Session["SavedSQLSources"] != null)
                SavedSQLSources = (Dictionary<String, SqlDataSource>)Session["SavedSQLSources"];
        }
    }

Привет, у меня есть несколько ASPxCombobox, каждый из которых имеет свой собственный источник данных. Итак, сначала я спас каждый идентификатор элемента управления с соответствующим им источником данных в словаре.

    protected void Cmb_Callback(object source, CallbackEventArgsBase e)
    {
        ASPxComboBox comboBox = (ASPxComboBox)source;
        string[] args = e.Parameter.Split('|');

        for (int i = 0; i < args.Length; ++i)
            SavedSQLSources[comboBox.ID].SelectParameters[i].DefaultValue = args[i];
        comboBox.DataSourceID = SavedSQLSources[comboBox.ID].ID;
        comboBox.DataBind();
    }

Выполняя несколько действий на странице, каждый элемент управления затем запускает свой обратный вызов и связывает свои данные с соответствующим источником данных.

Хорошо ... Отлично работает при непосредственном использовании источника данных, но не получает элементов, извлекаемых из источника данных, сохраненного в Session (из SavedSQLSources). Разве экземпляр объекта не должен быть таким же?

Заранее спасибо, TheRainFall.

1 Ответ

0 голосов
/ 30 марта 2012

Хорошо, я отказался от словарного метода и решил его, связав каждый ASPxCombobox со своим SqlDatasource со стороны клиента:

DataSourceID="SqlDataSource1"

Затем в обратном вызове я получил экземпляр sqldatasource из родительского контейнера с помощьюиспользуя datasourceID, на который ссылается клиентская сторона:

SqlDataSource tempSqlDatasource= (SqlDataSource)comboBox.Parent.FindControl(comboBox.DataSourceID);

Основная цель состояла в том, чтобы перезагрузить весь комбинированный список без перезагрузки страницы, хотя я мог бы сделать это только на стороне клиента.

...