protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int id = int.Parse(GridView1.DataKeys[0].Value.ToString());
        int power = int.Parse(((DropDownList)GridView1.Rows[e.RowIndex].FindControl("DropDownList1")).Text.ToString());
        string username = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1")).Text.ToString();
        string password = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox2")).Text.ToString();
        string questions = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox3")).Text.ToString();
        string answer = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox4")).Text.ToString();
        string status = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox5")).Text.ToString();
        string sql = "update t_user set username='" + username + "',password='" + password + "',questions='" + questions + "',answer='" + answer + "',status='" + status + "',[power]=" + power + " where userid=" + id + "";
        kd.ExecuteSql(sql);
        //GridView1.DataBind();
    }
 kd.ExecuteSql(sql);是执行sql语句,断点可以看到power这个字段是已经被更改了,但是之后又变回null
除了power用Eval,其他绑定的都是用Bind
有没办法可以让它更新成功?

解决方案 »

  1.   

    page_load里是否加了ispostback
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { TextBox tb = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox001"); 
    string dkvalue = GridView1.DataKeys[e.RowIndex].Value.ToString(); 
    string sql1 = "update A set name='" + tb.Text.ToString() + "' where id='" + dkvalue + "'"; 
    conn.Open(); 
    SqlCommand cmd = new SqlCommand(sql1, conn); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 
    GridView1.EditIndex = -1; 
    BindData(); 

      

  2.   

    是不是这个导致的 [power]
    在其他字段上,包括id,都没有[].
      

  3.   

    sql语句里面已经变了?
    kd.ExecuteSql(sql);
    是执行到数据库里面的吗?应该可以啊。
    GridView1.DataBind();
    需要重新取数据再执行GridView1.DataBind();
      

  4.   

    还有就是楼上说得,如果在page_load里面有对页面控件的初始化,
    要使用if(!ispostback)
      

  5.   

       <asp:gridview id="gv" runat="server" Width="100%" 
                                            BorderColor="#9DB6DF" BorderWidth="0px" datakeynames="PId"
    AutoGenerateColumns="False" onrowdatabound="gv_RowDataBound" 
                        onrowdeleting="gv_RowDeleting" 
                        onrowediting="gv_RowEditing" 
                        onrowcancelingedit="gv_RowCancelingEdit" 
                        onrowupdating="gv_RowUpdating">

    <AlternatingRowStyle CssClass="Alternatingback"></AlternatingRowStyle>
    <RowStyle CssClass="griditem"></RowStyle>
    <HeaderStyle CssClass="gridheader"></HeaderStyle>
    <Columns>
    <asp:TemplateField HeaderText="名  称">
    <HeaderStyle Width="25%"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center" />
    <ItemTemplate>
    <%# Eval("Desc") %>
    </ItemTemplate>
    <EditItemTemplate >
    <asp:TextBox id="txt_Desc" CssClass="inputText"  MaxLength="100" runat="server" Text='<%# Eval("Desc") %>' Width="86%">
    </asp:TextBox>
     <asp:RequiredFieldValidator ID="rfv" runat="server" ErrorMessage="*" ControlToValidate="txt_Desc"></asp:RequiredFieldValidator>

    </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="操作" ItemStyle-HorizontalAlign="Center" ShowHeader="False">
    <HeaderStyle Width="20%"></HeaderStyle>
     <EditItemTemplate>
                            <asp:LinkButton ID="LinkButton5" runat="server" CausesValidation="True" CommandName="update">保存</asp:LinkButton>
                            <asp:LinkButton ID="LinkButton4" runat="server" CausesValidation="False" CommandName="cancel">取消</asp:LinkButton>
                        </EditItemTemplate>
    <ItemTemplate>
      <asp:LinkButton ID="LinkButton1" runat="server" CommandName="edit" CausesValidation="false"  OnClientClick="return confirm('确认要编辑吗?');">编辑</asp:LinkButton>
                                          <asp:LinkButton ID="LinkButton2" runat="server" CommandName="delete" CausesValidation="False"  OnClientClick="return confirm('确认要删除吗?');">删除</asp:LinkButton>
                                          <asp:LinkButton ID="LinkButton3" runat="server" CommandName="Select" CausesValidation="False" Visible="false" >选取</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
         <EmptyDataTemplate  >
                                         <tD>名    称</tD>
                                  
                                         <td>操    作</td> 
                                     </EmptyDataTemplate>
                                     <EmptyDataRowStyle CssClass="gridheader" />
    </asp:gridview> protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {
                gv.EditIndex = e.RowIndex;
                int id = int.Parse(gv.DataKeys[e.RowIndex].Value.ToString());
              
                string strDesc =((TextBox)gvp.Rows[e.RowIndex].FindControl("txt_Desc")).Text.Trim();
                     //更新数据
                gv.EditIndex = -1;
                BindData();
            }
      

  6.   

    kd.ExecuteSql(sql)这句是可以更新到数据库的,但是之后出了{}后,[power]字段就字段变成了null.
    BindData(); 加不加结果都是一样
    还有.page_load里面是没代码的....数据源是用datasoures配置的
    初步推测是Eval()单向传输数据,所以无法更新
      

  7.   

    绑定的时候写到if(!ispostback)里面
    应该就可以了