【问题标题】:Dropdownlist in gridview not firing selectedindex changed event网格视图中的下拉列表未触发 selectedindex 更改事件
【发布时间】:2012-11-27 07:16:02
【问题描述】:

我在不触发 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 块。执行有什么问题。能否请您提出解决方案

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

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

    删除此代码。

    {
       // Bind the GridView again to maintain previous entered data in the gridview
       DataBindGrid();
    }
    

    【讨论】:

    • 我想在回发时再次绑定它,我将不同的更新数据源分配给 gridview
    • 那么你应该在某些事件中绑定它而不是 Page_load 可以在 DDL1_SelectedIndexChanged 中
    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 删除 DataBindGrid();从 DDL1_SelectedIndexChanged 事件和 caode 放入 if(!Page.IsPostBack) { // 将 GridView 绑定到某物。数据绑定网格(); } else { // 再次绑定 GridView 以保持之前在 gridview 中输入的数据 DataBindGrid(); }
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2021-09-17
      • 1970-01-01
      相关资源
      最近更新 更多