1

グリッドビューでドロップダウンリストの選択したインデックス変更イベントを発生させないという問題があります。SOスレッドを通過しました。それは私にとって完全に機能しているわけではありません。以下のような実装があります。

.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 に答える