2011-06-23 7 views
0

私はASP.NET/C#プロジェクトで作業しており、GridViewコントロールを持っています。列の1つは、内部にImageButtonを持つTemplateField/ItemTemplateです。 OnClickイベント中、私はパネルを見えるようにします。通常のImageButtonでこれを行うと、ページがリロードされ、パネルが表示されます。これは、GridView内のImageButtonでは発生しません。私はそれをどうやって作ることができるのか、それともなぜそうなのか誰にも分かりますか?GridView内のImageButtonのOnClickと通常のImageButtonの違い

お時間がありましたら、ご不明な点がありましたらお知らせください。

ここでは、関連するASPの定義は

<asp:TemplateField ItemStyle-Width="90px" ItemStyle-VerticalAlign ="Bottom" ItemStyle-HorizontalAlign ="Center" HeaderText="Add Alias"> 
       <HeaderStyle Font-Bold="True" Font-Size="11px" VerticalAlign="Bottom"/> 
        <ItemTemplate> 
         <asp:ImageButton ID ="btnAddAliasHeader" runat="server" ImageUrl="~/img/AddAlias.gif" onclick="btnAddAlias_Click" /> 
       </ItemTemplate> 
       </asp:TemplateField> 

だと、ここでのOnClick関数のC#です。

protected void btnAddAlias_Click(object sender, EventArgs e) 
{ 
    ImageButton btnAddAlias = (ImageButton)sender; 
    GridViewRow row = (GridViewRow)btnAddAlias.Parent.Parent; 
    int rowIndex = row.RowIndex; 

    lblSelectedCity.Text = gvResults.Rows[rowIndex].Cells[0].Text; 
    lblSelectedCountry.Text = ddlCountry.Text; 
    pnlAddAlias.Visible = true; 

} 

OnRowCommandイベントを追加してパネルを表示させましたが、それでも表示されません。ポストバックと何か関係があるかもしれないと思います。グリッドビューの外側のボタンをクリックすると、リロード時にグリッドビュー内のボタンからのパネルがうまく表示されるためです。

編集:私はばかだが、これはすべてアップデートパネルで起こっていることを忘れている。

+0

私たちにいくつかのコードを教えてください。 –

+0

GridViewとPanelの両方が同じUpdatePanel内にありますか? – pseudocoder

答えて

0

グリッドビュー(リストビュー、リピータなど)のようなコンテナ内のボタン/イメージボタンは、そのクリックイベントがコンテナ自体に吹き上げられます。パネルが表示されるようにするには、ボタンのコマンド名とコマンド引数のプロパティを使用する必要があり、その後、パネルをdispayするGridViewののOnRowCommandイベントを使用

HTH

+0

OnRowCommandイベントを追加してパネルを表示させましたが、まだ表示されません。ポストバックと何か関係があるかもしれないと思います。グリッドビューの外側のボタンをクリックすると、リロード時にグリッドビュー内のボタンからのパネルがうまく表示されるためです。 – Nick

+0

@ニック:元の質問に対するコメントに記載されている擬似コードは、同じアップデートパネルのグリッドビューとパネルの両方ですか?そうでない場合は、表示するパネルを含む更新パネルにトリガを追加する必要があります。 – Yiangos

0

私はあなたのイベントのISNを想定していますコマンドボタンをクリックしてonrowcreatedイベントを登録してください。

0

ポストバックが不要な場合。申し訳ありませんが、私は質問を誤解した場合。イメージボタン(サーバーコントロール)を使用する代わりに、aタグとjQueryにラップされたリンクまたは通常のイメージを使用できます。これにより、サーバーへのポストバックが防止されます。お役に立てれば。

<a href="#" id="viewPanel">Click to View Panel</a> 

$("#<%=viewPanel.ClientID%>").click(function(e) 
{ 
    e.preventDefault(); 
    $("#id_of_panel").show(); 

}); 

この情報がお役に立てば幸いです。あなたが記述のように、彼らはコントロールテンプレートにあるとき

+0

彼はポストバックを避けるか、クライアント側のコードを実行するよう求めていませんでした...? – pseudocoder

+0

@擬似コード - 質問を読んだ後、彼はコードを追加しました。また、彼はパネルを目に見えるようにしたいと言いました。サーバーでの処理が必要ない場合、私は彼に代替手段を提供していました。 – webtrifusion

1

Button秒、ImageButton sおよびLinkButton sがClickイベントを発生しません。 (編集:コントロールのOnClickプロパティで使用されていない限り)代わりに、含まれているコントロールはイベントを発生させ、GridViewの場合はRowCommandイベントです。下図のようにイベントハンドラで取るために適切なアクションを決定するために、ボタンのCommandNameCommandArgumentのプロパティを使用します。

マークアップ:

<asp:LinkButton ID="LinkButton1" runat="server" CommandName="DoStuff" CommandArgument='<%# Eval("RecordID") %>' Text="DoStuff"></asp:LinkButton> 

コード:

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
    If e.CommandName = "DoStuff" Then 
     'Do something with e.CommandArgument' 
    End If 
End Sub 
+0

彼らはイベントを発射しますが、私はデバッガを通ってどこに行くのかを知ることができます。ポストバックがGridview内のImageButtonで異なる仕組みですか? – Nick

0

あなたはユーザーオンデマンドすることができますperticularコントロールでOnclickを使用するのではなく、コントロールからcommandnameを渡してe.commandnameでチェックして、これまで実行したことを実行しなければならない場合は