2011-07-27 19 views
0

私はC#/ asp.netでWebプロジェクトを持っています。私はそれにコード化されたボタンを持っているGridViewとUserControlを持っています。ボタンにはOnClickイベントがあり、その結果、別のページにリダイレクトされます。この時点で、何度ボタンを押しても、onclickイベントは発生しません。しかし、ユーザーコントロール(コードの後ろにイベントがある)を使用しているページにボタンをハードコードすると、onclickイベントは正常に機能します。UserControl OnClickイベントは発生しません

また、UserControlのGridViewの外にボタンを移動すると、正常に動作します。しかし、私はスペースが限られており、ページの下部にあるポケットベルバーに配置する必要があります。背後に

<PagerTemplate> 
    <table width="100%" cellpadding="0" cellspacing="0"> 
     <tr> 
      <td align="left" valign="middle"> 
       <asp:Panel cssClass="PagerPanel" runat="server"> 
       <asp:Button ID="FirstButton" runat="server" OnClick="FirstButton_Click" Text="|&lt;" Enabled="<%# (_gridView.PageIndex > 0) %>" /> 
       <asp:Button ID="PrevButton" runat="server" OnClick="PrevButton_Click" Text="&lt;" Enabled="<%# (_gridView.PageIndex > 0) %>" /> 
       <%# _gridView.PageIndex+1 %> of <%# _gridView.PageCount %> 
       <asp:Button ID="NextButton" runat="server" OnClick="NextButton_Click" Text="&gt;" Enabled="<%# (_gridView.PageIndex < _gridView.PageCount-1) %>" /> 
       <asp:Button ID="LastButton" runat="server" OnClick="LastButton_Click" Text="&gt;|" Enabled="<%# (_gridView.PageIndex < _gridView.PageCount-1) %>" /> 
       </asp:Panel> 
      </td> 

      <td> 
      <asp:Button ID="Button1" OnClick="AddButton_Click" runat="server"  
       Text="Button" /> 
      </td> 
     </tr> 
    </table> 
    </PagerTemplate> 

ユーザーコントロールコード:

protected void AddButton_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("thisurl..."); 
} 

私は、このクリックイベントを処理するために行うことができますほかに何かわかりません。どうやらGridViewは何とか発射を止めています。とにかくUserControlのGridViewがonclickイベントを処理するボタンを持つことができますか?

答えて

1

あなたはASPにのCommandName =「ボタン」属性を追加する必要があります。その後、OnRowCommandイベントハンドラで(すなわち(e.CommandName == "ボタン" の場合)コマンド名を確認してください。

<asp:Button ID="Button1" CommandName="Button" runat="server" Text="Button" /> 

...

protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Button") 
    { 
    ... 
    } 
} 
+0

おかげ@Brady!それはまさに私ですグリッドビューには "OnRowCommand =" GridView_RowCommand "というプロパティが追加され、うまくいきました! – ImGreg

+0

これはほぼ完璧に機能しました。CommandNameとCommandArgumentは設定した内容に関係なく毎回「編集」と「-1」これを回避する方法はありますか?リダイレクトする場所を知るために、どのボタンが押されたかを一意に識別する方法が必要です。 – ImGreg

+0

それは変です。 gridviewのAutoGenerateEditButtonプロパティがtrueに設定されていないことを確認します。それでも動作させることができないのであれば、グリッドビューのボタンを使って素早く汚れたウェブサイトを作成し、それを動作させることができます。次に、排除のプロセスによって、何が起こっているのか把握することができます。あなたのグリッドビューに干渉しているものがいくつかあるかもしれません。 – Brady

2

問題は、イベントハンドラを実行する前にイベントをコントロールにバインドする必要がありますが、ボタンがテンプレートによってページに動的に追加されるため、イベントが発生するまでにイベントが存在しないためですトリガーされた。

これを修正する方法はたくさんありますが、EnsureChildControlsを使用して調べます。ボタンの宣言をして、GridViewコントロールのRowCommandイベントをワイヤー:

http://msdn.microsoft.com/en-us/library/system.web.ui.control.ensurechildcontrols.aspx

関連する問題