我在网上找了半天没找到解决办法,故向各位高手求教!//GridView前台显示主要代码
 <asp:GridView ID="GridViewPageFront" runat="server" AutoGenerateColumns="False"
   OnRowEditing="GridViewPageFront_RowEditing" OnRowUpdating="GridViewPageFront_RowUpdating" 
            OnRowCancelingEdit="GridViewPageFront_RowCancelingEdit" OnSelectedIndexChanging="GridViewPageFront_SelectedIndexChanging">
           //...     
<asp:BoundField HeaderText="页面ID" DataField="PageID" ReadOnly="True" />
                <asp:BoundField HeaderText="页面路径" DataField="path" ReadOnly="True"/>
                <asp:BoundField HeaderText="页面描述" DataField="Pdes"/>
                <asp:CommandField HeaderText="选择" ShowSelectButton="True" ButtonType="Button" EditText="选择"/>
                <asp:CommandField HeaderText="修改" ShowEditButton="True" ButtonType="Button" EditText="编辑"/>
//...
</asp:GridView>//绑定GridView的相关代码
string sql = "select * from pages ";
        conn = new SqlConnection(ConnString);
        SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
        DataSet dataSet = new DataSet();
        conn.Open();
        adapter.Fill(dataSet, "pages");
        GridViewPageFront.DataSource = dataSet;
        GridViewPageFront.DataKeyNames = new string[] { "PageID" };
        GridViewPageFront.DataBind();
        conn.Close();//点击更新按钮
protected void GridViewPageFront_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        conn = new SqlConnection(ConnString);
        string sql = "update pages set Pdes='"
            + ((TextBox)(GridViewPageFront.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "' where PageID='"  + Convert.ToInt32(GridViewPageFront.DataKeys[e.RowIndex].Value) + "'";
//问题就出现在这一行,GridViewPageFront.Rows[e.RowIndex].Cells[2].Controls[0]
//而Convert.ToInt32(GridViewPageFront.DataKeys[e.RowIndex].Value)可以得到值
        command = new SqlCommand(sql, conn);
        conn.Open();
        command.ExecuteNonQuery();
        conn.Close();
        GridViewPageFront.EditIndex = -1;
        //重新绑定省略
    }报错:指定的参数已超出有效值的范围,不知道怎么解决,请高手指教!

解决方案 »

  1.   

      + ((TextBox)(GridViewPageFront.Rows[e.RowIndex].Cells[2].FindControl("控件的ID")))
      

  2.   

    我不太知道GridView的更新的原理,就是看显示的时候只有非只读的,都用TextBox表示的,在哪里设置TextBox的ID呢?
    能再详细说说吗?我在网上也看到了FindControl,但对我来说,可以用吗?
      

  3.   

     不需要findControl方法只需要改成  GridViewPageFront.Rows[e.RowIndex].Cells[2].Text.ToString().Trim()
      

  4.   

    建议自己控制
    参考代码
    http://dotnet.aspx.cc/file/Add-Delete-Update-Edit-Data-With-Paging-in-GridView.aspx
      

  5.   

    F11单步查看
    if(!IsPostBack)
      {
      BindData();
      }
    protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
      {
      gv.EditIndex = e.RowIndex;
      int id = int.Parse(gv.DataKeys[e.RowIndex].Value.ToString());
        
      string str = ((TextBox)gv.Rows[e.RowIndex].FindControl("txt")).Text.Trim();
        
      gv.EditIndex = -1;
      BindData();
      }