有一个GridView代码如下:
<asp:GridView ID="GridView_WarningList" runat="server"  CssClass="warninglist" 
        AllowSorting="True" AutoGenerateColumns="False"   DataKeyNames="ID" 
        PageSize="18" AllowPaging="true" 
        onpageindexchanging="GridView_WarningList_PageIndexChanging">
        <Columns>
       
        <asp:BoundField  DataField="ID"  HeaderText="编号"/>
        <asp:BoundField  DataField="Title"  HeaderText="信息标题" />
        <asp:BoundField  DataField="Time" HeaderText="时间" DataFormatString="{0:yyyy-mm-dd}" />
         <asp:TemplateField HeaderText="操作" >
        <ItemTemplate>
            <asp:Button ID="check_btn" runat="server" Text="查看"  CssClass="admin_control"/>
            <asp:Button ID="alter_btn"
                runat="server" Text="修改" CssClass="admin_control"   OnClick="Alter_Click" />
  
问题:如何在“修改按钮”的“OnClick”事件“Alter_Click”中获取该行对应的“ID”值?
后台方法:
protected void Alter_Click (object sender,EventArgs e)
        { 
           
        }

            <asp:CheckBox ID="select_box" runat="server"  CssClass="admin_control"/></ItemTemplate>
        </asp:TemplateField>
        </Columns>
        <SelectedRowStyle  BackColor="#eeeef6" />
        <PagerStyle  BackColor="#eeeef6" Font-Bold="true" Font-Underline="true" HorizontalAlign="Left"  />
        <HeaderStyle  CssClass="warninglist_header"/>
        <FooterStyle  CssClass="warninglist_footer"/>
</asp:GridView>

解决方案 »

  1.   

    设置ommandArgument  
    或GridViewRow gvr = (sender as Button).NamingContainer as GridViewRow;   
    TextBox txt=gvr.FindControl("txt") as TextBox;
      

  2.   

    可以绑定的
    后台用rowcommand事件
      

  3.   

    是不是这个思路???
    http://topic.csdn.net/u/20110217/18/c32afa1b-0341-40e3-a589-bb2e4edd20fc.html
      

  4.   

    http://blog.csdn.net/xianfajushi/archive/2008/11/30/3413317.aspx
      

  5.   

     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
                <Columns>
                    <asp:BoundField DataField="ID" HeaderText="ID" />
                    <asp:BoundField DataField="Name" HeaderText="Name" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        protected void Button1_Click(object sender, EventArgs e)
        {
            int index = ((GridViewRow)(sender as Button).Parent.Parent).RowIndex;
            int id = Convert.ToInt32(GridView1.Rows[index].Cells[0].Text);
            Response.Write(id.ToString());
        }
      

  6.   


    protected void Alter_Click (object sender,EventArgs e)

      Button Ig = (Button)sender;
      GridViewRow gv = (GridViewRow)Ig.Parent.Parent;
      string strID= GridView_WarningList.DataKeys[gv.RowIndex].Values[0];
    }
      

  7.   

    gv.RowIndex 就是你点击行的索引
      

  8.   

    还有个更加简单的方法 你在按钮里面绑定“ID”值就OK了
    asp:Button ID="alter_btn"
    runat="server" Text="修改" CssClass="admin_control" OnClick="Alter_Click"  CommandName="SelectData" CommandArgument='<%#Eval("ID") %>' />   
    在后台激发RowCommand事件就能获取到
     if (e.CommandName == "SelectData")
     { 
    string strDataKey = e.CommandArgument.ToString();
    }
      

  9.   

    楼上已经说了一些方法,还可以通过
    对<asp:Button ID="alter_btn"
    runat="server" Text="修改"  aaa='<%# Eval("ID")%>' CssClass="admin_control" OnClick="Alter_Click" />  后台将E转换为BUTTON 然后 button.Attributes["aaa"] 来获得,貌似是这样,不知道写的对不对,你试试?
      

  10.   

    以前我也经常遇到这样的问题,在GRIDVIEW里获得比如 下拉列表框 然后要获得ID,按钮还强点,可以使用commandArgument   那些根据name判断获取。前几天使用Attributes获得,效果是相当好啊,哈哈
      

  11.   

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
                <Columns>
                    <asp:BoundField DataField="ID" HeaderText="ID" />
                    <asp:BoundField DataField="Name" HeaderText="Name" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" aaa='<%# Eval("ID")%>'/>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
    protected void Button1_Click(object sender, EventArgs e)
        {
    Button b=sender as Button;
            int index = Convert.ToInt32(b.Attributes["aaa"].ToString());
            Response.Write(id.ToString());
        }
      

  12.   

    13楼的最简单了,也最常用,不会出错,用CommanArgument绑定