テンプレートフィールドを介してImageButtonsが列に追加されたGridviewがあります。「OnClick」イベントに関数を添付しました。
この関数に入ったら、クリックされたボタンがある行のインデックスを取得するにはどうすればよいですか。私が持っているのはページ上のマウス座標だけのようです。
テンプレートフィールドを介してImageButtonsが列に追加されたGridviewがあります。「OnClick」イベントに関数を添付しました。
この関数に入ったら、クリックされたボタンがある行のインデックスを取得するにはどうすればよいですか。私が持っているのはページ上のマウス座標だけのようです。
行をループする代わりに、これを使用できます
<asp:ImageButton runat="server" id="ibtn1" ... RowIndex='<%# Container.DisplayIndex %>'
OnClick="button_click"/>
...
protected void button_click(object sender, EventArgs e){
ImageButton ibtn1 = sender as ImageButton;
int rowIndex = Convert.ToInt32(ibtn1.Attributes["RowIndex"]);
//Use this rowIndex in your code
}
送信者をImageButtonにキャストしてから、画像ボタンのNamingContainerを行にキャストします。
VB:
Dim btn as ImageButton = CType(sender, ImageButton)
Dim row as GridViewRow = CType(btn.NamingContainer, GridViewRow)
C#:
ImageButton btn = (ImageButton)sender;
GridViewRow row = (GridViewRow)btn.NamingContainer;
最も簡単なオプションはCommandArgumentを使用することであるというbdukesに同意します。データの一意のID番号をそのプロパティにバインドしてから、_RowCommandイベントを処理します。
例えば:
<asp:TemplateField >
<HeaderStyle Width="20" />
<ItemTemplate>
<asp:ImageButton ImageUrl="images/icons/iCal.png" CommandArgument='<%# Eval("Event_ID") %>' ToolTip="iCal" runat="server" Height="18" Width="18" />
</ItemTemplate>
</asp:TemplateField>
Protected Sub gv_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv.RowCommand
e.CommandArgument 'use this value in whatever way you like
End Sub
これはとても良いトリックです。私には別のトリックもあります。あなたはそれを試すことができます...
protected void userGridview_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
int rowindex = rowSelect.RowIndex;
}
}
それも良い方法です。
私が見つけた最も簡単な方法は、 ClickイベントではなくCommandイベントを使用し、コマンド引数としてアイテムIDを送信することです。
また、GridViewの行をループして、行のImageButtonをsender
Clickイベントの引数と比較することもできます。