次のコードは、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();
}