2013-03-06 3 views
0

Следующий код десериализует Config.xml и загружает значения объекта в сетке. Проблема в том, что когда я выбираю строку, она запускает GridCustomers_RowSelected, но конфигурационный объект имеет значение null. Я понимаю, что это связано с тем, что каждый раз, когда я выбираю строку, он возвращает сообщения и забывает значения в объекте конфигурации.Сохранять значение объекта после обратной передачи

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

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