2012-03-30 65 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); 

的主要目的是重新加载所有组合框无需重新加载页面虽然我也只是做了该客户端。