2011-10-03 26 views
0

我有一个GridView控件和Combobox控件都成功地填充在我的Page_Load事件中(在检查IsPostBack == false的块内)。ASP.Net GridView控件和ComboBox困境

我有一个空按钮“btnClick”事件处理程序,它将在点击时重新加载页面。 GridView和Combobox控件都将它们的EnableViewState属性设置为True。我期待和期待的行为是:

  1. 页面将重新加载GridView控件仍然填充。
  2. 页面将重新加载组合框仍然填充,并且用户选择的项目仍然设置为选定项目。

不幸的是,我发现了行为如下:

  1. GridView控件现在是空的,并没有显示出数据。
  2. Combobox现在是空的。

代码如下:

public MyPage() 
{ 
    this.Load += new EventHandler(Page_Load); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack == false) 
    { 
     DataAccessObj daObj = new DataAccessObj(); 

     foreach (DataRow dataRow in daObj.GetAllData()) 
     { 
      ListItem listItem = new ListItem(dataRow.ToString(), dataRow.Id.ToString()); 
      myCombobox.Items.Add(listItem); 
     } 

     IncidentGrid.DataSource = daObj.GetIncidentsByReportedById(0); 
     IncidentGrid.DataBind(); 
    } 
} 

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    // Do nothing 
} 

我想这样做是允许用户从ComboBox中选择一个项目。点击提交后,GridView将被重新填充(基于所选项目)。 Combobox将保持填充状态并显示最后选择的项目。

有人可以帮助解释我可能会出错的地方吗? TIA

+1

如果没有看看您的代码,我们无法告诉您哪里出错! – Widor

回答

1

当您点击按钮时,页面被调回,在你的页面加载,如果你需要适当数据绑定网格中的回发,你需要一个条件添加到您的网页加载事件像

首先您btn_click,你需要存储的东西,如选择的ID:

if (myCombobox.SelectedItem != null) 
    { 
     if (int.TryParse(myCombobox.SelectedItem.Value, out reportedById) == false) 
     { 
      reportedById = 0; 
      ViewState["reportedById"] = reportedById; // Need to remember which one was selected 
     } 
    } 

然后在您的帖子返回

else (IsPostBack) 
    { 
     if (ViewState["reportedById"]) != null) 
    { 
     IncidentGrid.DataSource = daObj.GetIncidentsByReportedById(Convert.ToInt32(ViewState["reportedById"])); 
     IncidentGrid.DataBind(); 
myCombobox.SelectedItem.Value = ViewState["reportedById"].ToString(); // set combo 

    } 

     else 
     { 
     IncidentGrid.DataSource = daObj.GetIncidentsByReportedById(0); 
     IncidentGrid.DataBind(); 

      } 
    } 
+0

我不知道为什么,但我得到一个“System.NullReferenceException:对象引用未设置为对象的实例。”我已经简化了代码,所以在我的btn_click hander中就是:ViewState [“MyKey”] =“test”;然后,Page_Load中的所有内容都是检查IsPostBack的块,并且其中包含txtDisplay = ViewState [“MyKey”]。ToString(); – millie