我的aspx页面上有一个gridview,使用一系列ASP.NET LinkButton对象设置OnRowCommand事件,以使用CommandName属性处理逻辑。我需要访问GridViewRow.RowIndex以从所选行中检索值,并在调试应用程序时注意它是GridViewCommandEventArgs对象的非公共成员
有没有办法可以访问这个属性,这是一个更好的实现吗?
这是我的源代码:
aspx页面:
<asp:GridView ID="MyGridView" runat="server" OnRowCommand="MyGirdView_OnRowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton
id="MyLinkButton"
runat="server"
CommandName="MyCommand"
/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
背后的代码
protected void MyGirdView_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
//need to access row index here....
}
更新:
@brendan - 我在以下代码行中遇到以下编译错误:
“无法转换类型 'System.Web.UI.WebControls.GridViewCommandEventArgs' 至 'System.Web.UI.WebControls.LinkButton'“
LinkButton lb = (LinkButton) ((GridViewCommandEventArgs)e.CommandSource);
我略微修改了代码,以下解决方案有效:
LinkButton lb = e.CommandSource as LinkButton;
GridViewRow gvr = lb.Parent.Parent as GridViewRow;
int gvr = gvr.RowIndex;
答案 0 :(得分:1)
这不是世界上最干净的东西,但这就是我过去做过的事情。通常我会把它全部排成一行,但我会在这里分解,所以它更清楚。
LinkButton lb = (LinkButton) ((GridViewCommandEventArgs)e.CommandSource);
GridViewRow gr = (GridViewRow) lb.Parent.Parent;
var id = gr.RowIndex;
基本上你得到你的按钮,从一个按钮到一个单元格,从一个单元格移动到另一个单元格。
这是一行版本:
var id = ((GridViewRow)((LinkButton)((GridViewCommandEventArgs)e).CommandSource).Parent.Parent).RowIndex;