ASP.Net:GridView控件和组合框问题

时间:2011-10-03 16:35:54

标签: c# asp.net

我有一个GridView控件和Combobox控件,它们都在我的Page_Load事件中成功填充(在一个检查IsPostBack == false的块中)。

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

  1. 页面将重新加载,GridView控件仍然填充。
  2. 页面将重新加载,Combobox仍然填充,用户选择的项目仍然设置为所选项目。
  3. 不幸的是,我得到的行为如下:

    1. GridView控件现在为空,不显示任何数据。
    2. Combobox现在是空的。
    3. 代码如下:

      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 个答案:

答案 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();

            }
    }