我有一个GridView控件和Combobox控件,它们都在我的Page_Load事件中成功填充(在一个检查IsPostBack == false的块中)。
我有一个空按钮'btnClick'事件处理程序,它会在点击时重新加载页面。 GridView和Combobox控件都将EnableViewState
属性设置为True。我期待和希望的行为是:
不幸的是,我得到的行为如下:
代码如下:
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
答案 0 :(得分: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();
}
}