我要实现的是单击gvPOHeader某一行时,gvPOLine会根据gvPOHeader选中行的字段值绑定数据,但是在单击时总是取不到值。
后台代码: protected void gvPOHeader_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //单击/双击 事件
                
                e.Row.Attributes.Add("onmousedown", "getCode('" + e.Row.Cells[2].Text + "')");
               
                //注:OnClick参数是指明为鼠标单击事件,后个是调用javascript的getCode函数
            }
        }前端代码:(我要获取的数据就是第三列,单据编号的值) <Columns>  
 <asp:TemplateField ItemStyle-CssClass="showcell" HeaderStyle-CssClass="showcell">
  <ItemTemplate><asp:LinkButton runat="server" ID="btnDetial" CommandName="Detail" >辅助列                       </asp:LinkButton></ItemTemplate></asp:TemplateField>
<asp:TemplateField ><ItemTemplate><asp:CheckBox ID="chSelect" runat="server" /></ItemTemplate></asp:TemplateField> 
<asp:TemplateField HeaderText="单据编号" >  <ItemTemplate> <%#Eval("FormCode").ToString()%> </ItemTemplate>  </asp:TemplateField> ...js代码:
 <script type="text/javascript"  language="javascript">
    function getCode(code)
    {
        document.getElementById("<%=frmCode.ClientID %>").value= code ;
    }
</script>
单击鼠标文本框没反应,开始我以为是数据没有传递过去,后来我把e.Row.Attributes.Add("onmousedown", "getCode('" + e.Row.Cells[2].Text + "')")改成e.Row.Attributes.Add("onmousedown", "getCode('aaa')")发现可以实现,说明不是数据没有传递过去,而是e.Row.Cells[2].Text没有获取到数据,这个方法里面设置断点也设置不了,不知道到底哪里出的问题,求大神们帮忙。gridview单击某行

解决方案 »

  1.   

    你把e.Row.Cells[2].Text 拿出来,定义一个变量接收,然后再调试看看。
      

  2.   


    protected void GridView1_DataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    Response.Write(e.Row.Cells[2].Text);
                }
            }
    这样是可以获取到值得
      

  3.   

    说明不是数据没有传递过去,而是e.Row.Cells[2].Text没有获取到数据,那你就先定义个变量,单步调试。
    string text = e.Row.Cells[2].Text;
    e.Row.Attributes.Add("onmousedown", "getCode('" + text + "')");
      

  4.   

    这样就需要看aspx里面的源代码了,有可能某一行的某一列里面有多个服务器控件,假设,第一个服务器控件是TextBox 就这样取值
    protected void GridView1_DataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    Response.Write(((TextBox)(e.Row.Cells[2].Controls[0])).Text);
                }
            }
      

  5.   

    试试吧,这里没有几种取值方式,我记得大概是这样子,好久没用GridView了...
      

  6.   

    为什么我添加了你上面说的代码页面没有显示内容?而我有测试了Response.Write(“aaa”)正常显示。还是那句话,因为e.Row.Cells[2].Text根本就是空的。关键是为什么是空的呢?我明明都能查出来数据呀,还有我gridview里没有放服务器控件。
      

  7.   


    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    DataRowView dr = (DataRowView)e.Row.DataItem;
                    Response.Write(dr["FormCode"].ToString() + "<br>");
                }
            }
    这样呢  
      

  8.   

    如果这个能查出来的话,然后配合 e.Row.RowIndex 取某一行吧,好久没用了,到这了