2013-03-06 71 views
0

以下代碼將Config.xml反序列化並將對象值加載到網格中。問題是,當我選擇一行時,它會觸發GridCustomers_RowSelected,但配置對象爲空。我知道這是因爲每當我選擇一行時,它會回傳並忘記config對象中的值。在回發後保留對象的值

一個解決這個問題可能是我保存的配置對象保存在session,或視圖狀態。或者我反序列化IsPostBack塊之外的對象。我不知道有沒有其他更好的解決方案來保留config對象中的值。

private Config config = null; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     config = new Config(); 
     string file = @"C:\Config.xml"; 
     XmlData xmlData = new XmlData(file); 
     config = xmlData.Deserialize(); 

     StoreCustomers.DataSource = config.Customers; 
     StoreCustomers.DataBind(); 
    } 
} 

protected void GridCustomers_RowSelected(object sender, DirectEventArgs e) 
{ 
    string customerID = e.ExtraParams["ID"].ToString(); 
    string customerName = e.ExtraParams["Name"].ToString(); 

    Customer customer = new Customer(); 
    customer = config.Customers.Where(a=> a.ID == customerID).SingleOrDefault(); 

    StoreCompanies.DataSource = customer.Companies; 
    StoreCompanies.DataBind(); 
} 

回答

0

還是我反序列化對象的IsPostBack

外面做,反序列化和的IsPostBack

protected void Page_Load(object sender, EventArgs e) 
{ 
    config = new Config(); 
    string file = @"C:\Config.xml"; 
    XmlData xmlData = new XmlData(file); 
    config = xmlData.Deserialize(); 

    if (!Page.IsPostBack) 
    { 
     StoreCustomers.DataSource = config.Customers; 
     StoreCustomers.DataBind(); 
    } 
} 
之外創建它