我是这么实现的
<asp:TemplateField HeaderText="编号">
<ItemStyle Width="50px" HorizontalAlign="Center"></ItemStyle><HeaderStyle Width="50px" HorizontalAlign="Center"></HeaderStyle>
<ItemTemplate>
<asp:TextBox id="txtproductNumber" runat="server" Width="50px" Text='<%# Eval("Material_id") %>' CausesValidation="True" BorderStyle="None" BorderWidth="0px" BackColor="Transparent"[color=#FF0000]onfocusout="javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView1$ctl<%=(Container.DisplayIndex+2)%>$rowclick', '');"[/color ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="按钮">
<ItemStyle BackColor="#EFF3FB" Width="190px" HorizontalAlign="Left"></ItemStyle><HeaderStyle Width="190px" HorizontalAlign="Center"></HeaderStyle>
<ItemTemplate>
<asp:LinkButton id="rowclick" runat="server" CausesValidation="False" CommandArgument='<%# Eval("id") %>' CommandName="rowclick_open"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
onfocusout="javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView1$ctl<%=(Container.DisplayIndex+2)%>$rowclick', '');" 这里要怎么获取行号请高手指点下

解决方案 »

  1.   


     <%=this.GridView1.DataKeys[e.RowIndex].Value.ToString() %> 
      

  2.   

    <%=this.GridView1.DataKeys[e.RowIndex].Value.ToString() %> 这个获取不到啊
      

  3.   


    这个不能胡写,不能有些人那样可笑地:先到客户端看看html代码,然后硬编码到程序中。这个必须由asp.net自动生成。你可以在RowDataBound事件处理程序中写:if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Edit)
    {
        TextBox c = e.Row.FindControl("txtproductNumber") as TextBox;
        c.Attributes["onfocusout"] = this.Page.ClientScript.GetPostBackEventReference(e.Row.FindControl("rowclick"), string.Empty);
    }
      

  4.   

    如果你想知道rowclick的客户端id,可以写:LinkButton c = e.Row.FindControl("rowclick") as LinkButton;
    string clientId= c.ClientID;不过,我对你的代码的评估的重点不在于知道不知道行号,而是你对客户端id整个是上述那种可笑的“从客户端看看id”的思路的。当你的GridView在整个页面上的布局有所调整(例如GridView放到一个实现了INamingContainer接口的控件中,或者在GridView前边插入某个控件造成GridView在页面上的排列“次序”改变了),甚至当有一些运行时自动装载的控件,那么“'ctl00$ContentPlaceHolder1$GridView1$ctl ...”这个路径也是随时调整的。
      

  5.   

    你从来不需要自己去写“__doPostBack('”这样的代码。如果写了,立马删除。这种写法从项目的设计、管理上是类似于“投毒”,潜伏一段时间之后肯定要爆发。