質問

テンプレートフィールドを介して列にImageButtonsが追加されたGridviewがあります。 <!> quot; OnClick <!> quot;に関数を添付しました。イベント。

この関数で、クリックされたボタンがある行のインデックスを取得するにはどうすればよいですか。私が持っているのはページ上のマウス座標だけです。

役に立ちましたか?

解決

行をループする代わりに、これを使用できます

<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を使用することであるという点に同意します。データの一意の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

私が見つけた最も簡単な方法は、 イベントrel = "nofollow noreferrer"> Click イベントを実行し、コマンド引数としてアイテムIDを送信します。

GridViewの行をループして、行のImageButtonをClickイベントのsender引数と比較することもできます。

これは非常に良いトリックです。 別のトリックもあります。 試してみてください...

 protected void userGridview_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            int rowindex = rowSelect.RowIndex;
         }
    }

これも良い方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top