访问GridViewCommandEventArgs对象的非公共成员

时间:2009-01-07 18:06:19

标签: c# asp.net gridview

我的aspx页面上有一个gridview,使用一系列ASP.NET LinkBut​​ton对象设置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.LinkBut​​ton'“

LinkButton lb = (LinkButton) ((GridViewCommandEventArgs)e.CommandSource);

我略微修改了代码,以下解决方案有效:

LinkButton lb = e.CommandSource as LinkButton;
GridViewRow gvr = lb.Parent.Parent as GridViewRow;
int gvr = gvr.RowIndex;

1 个答案:

答案 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;