Gridview控件无法在文本框中更新数据
发表在ASP.NET图书答疑 2009-10-18
是否精华
版块置顶:
我在gridview 中点击“编辑”进入编辑状态 在文本框中输入新的数据后 点击“更新”,但文本框的值却始终没有改变,数据库值也没有改变。
我的更新代码:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {   
        //连接数据库
        SqlConnection myCon = new SqlConnection();
        myCon.ConnectionString = "Persist Security info=false;User id=sa;pwd=wxz;database=wxznet;server=PC-200909061709";
        myCon.Open();
        //获取文本框的值
        int id = int.Parse(GridView1.Rows[e.RowIndex].Cells[0].Text.Trim());
        string name = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text.Trim();
        //执行更新数据
        string sql = "update Table_1 set Name='" + name + "' where ID=" + id;
        SqlCommand myCom=new SqlCommand(sql, myCon);
        myCom.ExecuteNonQuery();
        myCon.Close();
        
        GridView1.EditIndex = -1;
        //重新绑定
        Bind();
}
此控件可以删除内容  ,数据库也允许修改数据,但是就是无法在文本框里改变值 ,我分析代码也没有错。 麻烦你们告诉我这是什么原因 谢谢!
分享到:
精彩评论 3
Confidence2009
学分:0 LV1
2009-10-18
沙发
数据库的字段设置主键字段没有?GridView控件自带的更新功能要求数据库要有主键字段来做一个某条数据的唯一标识的!
如果你设置了主键字段如将编号id设置为主键,程序中的id值如果你这样设置:
//获取文本框的值
int id = int.Parse(GridView1.Rows[e.RowIndex].Cells[0].Text.Trim());
那么你把GridView控件的DataKeyNames属性设置为id,即主键字段!
数据更新它得要找你更新的数据的主键,找不到就不会更新成功!
还有你对页面时行初始化即对Gridview控件中数据绑定时要在Page_Load事件中加上If(!IsPostBack){...}来首先判断下页面是否首次加载!
Confidence2009
学分:0 LV1
2009-10-18
板凳
示例:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True" 
                                          OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="12" 
                                          OnRowDataBound="GridView1_RowDataBound" BackColor="White" Font-Size="13px" 
                                          Width="541px" [strong]DataKeyNames="ID"[/strong]
                        OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting" 
                                          OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" 
                                          SkinID="gvSkin" >
                        <Columns>
                            <asp:TemplateField HeaderText="编号">
                                <ItemTemplate>
                                    <asp:Label ID="Label1" runat="server"><%# Eval("ID") %></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="考试科目">
                                <EditItemTemplate>
                                    <asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>' Width="80"></asp:TextBox>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label2" runat="server"><%# Eval("Name") %></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>                                                     
                            <asp:CommandField HeaderText="编辑" ShowEditButton="True" />
                            <asp:TemplateField HeaderText="删除" ShowHeader="False">
                                <ItemTemplate>
                                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="return confirm('确认要删除吗?');" 
                                        Text="删除"></asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                    </Columns>
                </asp:GridView>
后台部分代码:
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            InitData();  //初始化考试科目          
        }
    }
    //初始化考试科目
    protected void InitData()
    {
        Coursemr course = new Coursemr();       
        DataSet ds = course.QueryCourse();  
        GridView1.DataSource = ds;          //为GridView控件设置数据源        
        GridView1.DataBind();               //绑定数据
    }
    //GridView控件RowUpdating事件
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int ID = int.Parse(GridView1.DataKeys[e.RowIndex].Values[0].ToString()); //取出要更新记录的主键值
        Coursemr course = new Coursemr();           //创建Coursemr对象
        course.Name = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtName")).Text;
        if (course.UpdateByStr(ID))//使用Usersmr类UpdateByProc方法修改用户信息
        {
            Response.Write("<script language=javascript>alert('修改成功!')</script>");
        }
        else
        {
            Response.Write("<script language=javascript>alert('修改失败!')</script>");
        }
        GridView1.EditIndex = -1;
        InitData();
    }
dxformat
学分:0 LV1
2009-11-16
地板
int id = int.Parse(GridView1.Rows[e.RowIndex].Cells[0].Text.Trim());

把上句改成

string id=GridView1.DataKeys[e.RowsIndex].Value.Tostring();

试试
首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照