1

我在不触发 gridview 中下拉列表的选定索引更改事件时遇到问题。我经历了SO Thread。它并不完全适合我。我有如下实现。

.ASPX

<asp:DropDownList ID="DDL1" runat="server" AutoPostBack="true"   OnSelectedIndexChanged="DDL1_SelectedIndexChanged">
  <asp:ListItem Text="Review" Value="Review" Selected="True">Review</asp:ListItem>
  <asp:ListItem Text="Level1" Value="lvl1">Send Back to Level1</asp:ListItem>
</asp:DropDownList>

。CS

protected void Page_Load(object sender, EventArgs e)
  {
   if(!Page.IsPostBack)
  {
    // Bind the GridView to something.
       DataBindGrid();
  }
 else {
    // Bind the GridView again to maintain previous entered data in the gridview
       DataBindGrid();
  }
  }

  protected void DDL1_SelectedIndexChanged(object sender, EventArgs e)
  {
      this.lblCity.Text = ((DropDownList)sender).SelectedValue;
  }

protected void grdPoll_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if(Page.IsPostBack)
  {
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
      DropDownList ddl = e.Row.FindControl("DDL1") as DropDownList;
      if(ddl != null)
      {
        ddl.SelectedIndexChanged += new EventHandler(DDL1_SelectedIndexChanged);
      }
    }
  }
}

当我 if(!Page.IsPostBack)只保留块时,它工作正常。但我也想else阻止。执行有什么问题。你能建议解决方案吗

4

3 回答 3

2

问题是 !Page.IsPostBack 块之后的块,这不是您所说的其他事件部分。您在回发时再次绑定网格,这会导致事件丢失。您不必再次绑定它以在网格中进行更改。

删除此代码。

{
   // Bind the GridView again to maintain previous entered data in the gridview
   DataBindGrid();
}
于 2012-11-27T07:33:43.820 回答
0

试试这个:

protected void Page_Load(object sender, EventArgs e)
{
   if(!Page.IsPostBack)
  {
    // Bind the GridView to something.
       DataBindGrid();
  }
 else {
    // Bind the GridView again to maintain previous entered data in the gridview
       //DataBindGrid(); //remove DataBindGrid(); from else
  }
}

protected void DDL1_SelectedIndexChanged(object sender, EventArgs e)
{
     this.lblCity.Text = ((DropDownList)sender).SelectedValue;
     DataBindGrid();
}
于 2012-11-27T08:51:15.820 回答
-1

将事件名称“Page_Load”替换为“Page_PreRender”

于 2012-11-27T09:36:24.577 回答