如果编程读取编辑模板内3个Textbox值 则读取不到更新的值 读取的是原始值这样导致更新不了新值!!如:
string chengCi = ((TextBox)gridview1.Rows[e.RowIndex].FindControl ("chengciTextBox1")).Text;
            string xiangMuHao = ((TextBox)gridview1.Rows[e.RowIndex].FindControl("xiangmuhaoTextBox1")).Text;
            string xiangMuName = ((TextBox)gridview1.Rows[e.RowIndex].FindControl("xiangmunameTextBox1")).Text;
            bool success = CatalogAccess.UpdateMuLu(xiangmuID, chengCi, xiangMuHao, xiangMuName);更新函数 存储过程应该没有问题 因为我将RowUpdating事情中3个要更新的字符串变量全部换成字符串常量调试后一起正常!如:
string chengCi ="1" ;
string xiangMuHao ="1"; 
string xiangMuName ="1";             
bool success = CatalogAccess.UpdateMuLu(xiangmuID, chengCi, xiangMuHao, xiangMuName);详细代码如下:
<asp:GridView
     ID="gridview1"
     DataKeyNames="XiangMuID"
     AutoGenerateColumns="false"
     runat="server" 
     OnRowUpdating="gridview1_RowUpdating" 
     OnRowCancelingEdit="gridview1_RowCancelingEdit" 
     OnRowEditing="gridview1_RowEditing">
     <Columns>
     <asp:BoundField HeaderText="序号" DataField="XiangMuID"  ReadOnly="true"/>
     <asp:TemplateField HeaderText="层次">
        <ItemTemplate>
           <asp:Label 
                ID="chengciLabel"
                Text='<%# Bind("ChengCi") %>'
                runat="server">
           </asp:Label> 
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox 
                 ID="chengciTextBox1"
                 TextMode="SingleLine"
                 Text='<%# Bind("ChengCi") %>'
                 runat="server"/>     
        </EditItemTemplate>
     </asp:TemplateField>
     <asp:TemplateField HeaderText="项目号">
        <ItemTemplate>
           <asp:Label
                ID="xiangmuhaoLabel"
                Text='<%# Bind("XiangMuHao") %>'
                runat="server">
            </asp:Label>
         </ItemTemplate>
         <EditItemTemplate>
            <asp:TextBox
                 ID="xiangmuhaoTextBox1"
                 Text='<%# Bind("XiangMuHao") %>'
                 TextMode="SingleLine"
                 runat="server">
             </asp:TextBox>
         </EditItemTemplate>
     </asp:TemplateField>
        ...
     <asp:CommandField ShowEditButton="true" />
     </Columns>
</asp:GridView>
    protected void gridview1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        try
        { 
            string xiangmuID = gridview1.DataKeys[e.RowIndex].Value.ToString();
            string chengCi = ((TextBox)gridview1.Rows[e.RowIndex].FindControl ("chengciTextBox1")).Text;
            string xiangMuHao = ((TextBox)gridview1.Rows[e.RowIndex].FindControl("xiangmuhaoTextBox1")).Text;
            string xiangMuName = ((TextBox)gridview1.Rows[e.RowIndex].FindControl("xiangmunameTextBox1")).Text;
            bool success = CatalogAccess.UpdateMuLu(xiangmuID, chengCi, xiangMuHao, xiangMuName);
            gridview1.EditIndex = -1;
            statusLabel.Text = success ? "更新成功" : "更新失败";
            BindGird();
          }
        catch (Exception ex)
        {
            throw ex;
        }
    }

解决方案 »

  1.   

    XiangMuID在数据库表中是不是int类型?是的话
     string xiangmuID = gridview1.DataKeys[e.RowIndex].Value.ToString();
    改为int xiangmuID = int.Parse(gridview1.DataKeys[e.RowIndex].Value.ToString());
      

  2.   

    在模板的textbox要双向的数据绑定 也就是Bind("字段")
      

  3.   

    http://blog.csdn.net/21aspnet/archive/2007/03/25/1540301.aspx GridView选中,编辑,取消,删除