0

次のコードは、Config.xmlを逆シリアル化し、オブジェクト値をグリッドにロードします。問題は、行を選択すると起動しますGridCustomers_RowSelectedが、構成オブジェクトがnullであるということです。これは、行を選択するたびにポストバックされ、構成オブジェクトの値を忘れてしまうためだと理解しています。

この問題の1つの解決策は、構成オブジェクトをセッションまたはビューステートに格納することです。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();
}
4

1 に答える 1

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();
    }
}
于 2013-03-06T10:02:25.780 に答える