【发布时间】:2010-10-02 18:22:42
【问题描述】:
我有一个 Gridview,其中 ImageButtons 通过模板字段添加到列中。我已经为“OnClick”事件附加了一个函数。
一旦在这个函数中,我怎样才能获得具有已单击按钮的行的索引。看来我只有页面上的鼠标坐标了。
【问题讨论】:
标签: asp.net vb.net gridview imagebutton
我有一个 Gridview,其中 ImageButtons 通过模板字段添加到列中。我已经为“OnClick”事件附加了一个函数。
一旦在这个函数中,我怎样才能获得具有已单击按钮的行的索引。看来我只有页面上的鼠标坐标了。
【问题讨论】:
标签: asp.net vb.net gridview imagebutton
您可以使用它而不是循环遍历行
<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;
【讨论】:
同意 bdukes 最简单的选择是使用 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
【讨论】:
这是一个很好的技巧。 我还有一个技巧。 你可以试试……
protected void userGridview_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
int rowindex = rowSelect.RowIndex;
}
}
这也是一个很好的方法。
【讨论】: