2011-09-28 51 views
1

我創建了一個簡單的ASPX頁面列出GridView中的記錄。記錄是事件列表,其中一列是報告事件的人員的ID。ASPX回發問題與組合框

初始頁面顯示所有記錄,但我想爲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號總是作爲列表的第一個元素出現,而不是用戶在提交按鈕上單擊時選擇的那個。

與此實現這個頁面的代碼如下:

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

回答

3

請記住,使用WebForms時,Page_Load代碼在創建回發的控件的事件處理程序代碼之前執行。

您必須填寫列表中檢查回發標志的部分,就像您使用網格一樣。

if (IsPostBack == false){ 
    //bind the combobox 
} 

否則,在回傳時,列表會重新填充,並選擇將不復存在。

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(); 
    } 
} 
+0

我改變了代碼上面,但是當頁面重新加載,組合框爲空,並且在GridView尚未根據所選擇的項目填充。 – millie