我创建了一个简单的ASPX页面,列出了GridView中的记录。记录是事件列表,其中一列是报告事件的人员的ID。
初始页面显示所有记录,但我想为ReportedBy列提供过滤器。我通过允许用户在文本框中键入ReportedByID然后单击提交按钮来实现此功能。这将使用筛选视图按预期刷新页面。
此页面的代码如下:
public MyPage()
{
this.Load += new EventHandler(Page_Load);
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack == false)
{
DataAccessObj daObj = new DataAccessObj();
IncidentGrid.DataSource = daObj.GetIncidentsByReportedById(0);
IncidentGrid.DataBind();
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
int reportedById = 0;
if (int.TryParse(txtReportedById.Text, out reportedById) == false)
{
reportedById = 0;
}
DataAccessObj daObj = new DataAccessObj();
IncidentGrid.DataSource = daObj.GetIncidentsByReportedById(reportedById);
IncidentGrid.DataBind();
}
为了使用户更友好,我决定添加一个填充了ReportedBy名称的下拉框,供用户选择,然后在单击提交按钮时用于过滤。下拉框的名称作为显示项,但值仍应设置为ID。
我遇到的问题是,从下拉框中获取的ID号始终作为列表的第一个元素而不是用户在单击提交按钮时选择的ID。
此页面的代码如下所示:
public MyPage()
{
this.Load += new EventHandler(Page_Load);
}
protected void Page_Load(object sender, EventArgs e)
{
DataAccessObj daObj = new DataAccessObj();
foreach (ReportedByItem repByItem in daObj.GetAllReportedBy())
{
ListItem listItem = new ListItem(repByItem.Name, repByItem.Id.ToString());
combobox.Items.Add(listItem);
}
if (IsPostBack == false)
{
IncidentGrid.DataSource = daObj.GetIncidentsByReportedById(0);
IncidentGrid.DataBind();
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
int reportedById = 0;
if (combobox.SelectedItem != null)
{
if (int.TryParse(combobox.SelectedItem.Value, out reportedById) == false)
{
reportedById = 0;
}
}
DataAccessObj daObj = new DataAccessObj();
IncidentGrid.DataSource = daObj.GetIncidentsByReportedById(reportedById);
IncidentGrid.DataBind();
}
任何帮助将不胜感激。 TIA
答案 0 :(得分:3)
请记住,使用WebForms,Page_Load代码在创建回发的控件的事件处理程序代码之前执行。
您必须在选中回发标志的部分填充列表,就像使用网格一样。
if (IsPostBack == false){
//bind the combobox
}
否则,在回发时,列表将重新填充,选择将消失。
答案 1 :(得分:1)
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataAccessObj daObj = new DataAccessObj();
foreach (ReportedByItem repByItem in daObj.GetAllReportedBy())
{
ListItem listItem = new ListItem(repByItem.Name, repByItem.Id.ToString());
combobox.Items.Add(listItem);
}
IncidentGrid.DataSource = daObj.GetIncidentsByReportedById(0);
IncidentGrid.DataBind();
}
}