2012-03-30 48 views
0
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,每個都有自己的數據源。因此,我首先將每個控件ID與它們在數據字典中相應的數據源對象保存在 之間。ASPxCombobox未從SQLdatasource保存在會話中

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。

回答

0

好吧,我放棄了對dictionnary方法以及每個ASPxCombobox從客戶端連接到它的SqlDataSource解決了這個:

DataSourceID="SqlDataSource1" 

然後在回調我用得到的SqlDataSource實例從父容器從客戶端引用的DataSourceID:

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

的主要目的是重新加載所有組合框無需重新加載頁面雖然我也只是做了該客戶端。