ASP.Net: GridView控件和组合框的问题
本文关键字:组合 问题 控件 Net GridView ASP | 更新日期: 2023-09-27 18:10:24
我有一个GridView控件和Combobox控件,这两个控件都成功地填充在我的Page_Load事件(在一个块内,检查IsPostBack == false)。
我有一个空按钮'btnClick'事件处理程序,点击时将重新加载页面。GridView和Combobox控件的EnableViewState
属性都设置为True。我所期待和希望的行为是:
- 页面将重新加载GridView控件。
- 页面将重新加载,组合框仍然填充,用户选择的项目仍然设置为所选项目。
不幸的是,我得到的行为如下:
- GridView控件现在为空,不显示数据。
- 组合框现在为空。
代码如下:
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
}
我想做的是允许用户从组合框中选择一个项目。单击Submit后,GridView将被重新填充(基于所选项)。组合框将保持填充状态,并显示最后选择的项目。
有人能帮我解释一下我可能出错的地方吗?TIA
当你点击你的按钮,页面被发回,在你的页面加载,如果它是一个回发你需要适当地绑定网格你需要添加一个条件到你的页面加载事件,如
首先在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
}
}
Then On your Post Back
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();
}
}