GridView_RowUpdating点击更新时取不到新值
这两天帮朋友解决一个Bug,代码读了好就还是找不出问题在哪,已经郁闷得快死了,呜呜。。。。程序员改bug 伤不起啊。后面通过监视、输出查找,浏览器调试,终于找出来。
废话不多说,来看下面:
后台代码:// string 编号, 教师, 征订代号, 课程名称, 教材名称, 出版社, 作者, 版次, 学期;int rowNum = e.RowIndex;string 编号 = GridView1.DataKeys[rowNum].Value.ToString();string 教师 = ((TextBox)(GridView1.Rows[rowNum].Cells[1].Controls[0])).Text.ToString();string 征订代号 = ((TextBox)(GridView1.Rows[rowNum].Cells[2].Controls[0])).Text.ToString();string 课程名称 = ((TextBox)(GridView1.Rows[rowNum].Cells[3].Controls[0])).Text.ToString();string 教材名称 = ((TextBox)(GridView1.Rows[rowNum].Cells[4].Controls[0])).Text.ToString();string 出版社 = ((TextBox)(GridView1.Rows[rowNum].Cells[5].Controls[0])).Text.ToString();string 作者 = ((TextBox)(GridView1.Rows[rowNum].Cells[6].Controls[0])).Text.ToString();string 版次 = ((TextBox)(GridView1.Rows[rowNum].Cells[7].Controls[0])).Text.ToString();string 学期 = ((TextBox)(GridView1.Rows[rowNum].Cells[8].Controls[0])).Text.ToString();string sqlstr = "update 教材信息表 set 教师='" + 教师 + "',征订代号='" + 征订代号 + "',课程名称='" + 课程名称 + "', " + "教材名称='" + 教材名称 + "',出版社='" + 出版社 + "',作者='" + 作者 + "',版次='" + 版次 + "',学期='" + 学期 + "' where 编号='" + 编号 + "'";ExecuteSql(sqlstr);
前台代码: <div> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="编号,教师,征订代号,课程名称,教材名称,出版社,作者,版次,学期" onrowupdating="GridView1_RowUpdating" PageSize="20" onrowediting="GridView1_RowEditing" onrowcancelingedit="GridView1_RowCancelingEdit" onrowdeleting="GridView1_RowDeleting" onpageindexchanging="GridView1_PageIndexChanging1" Height="168px" Width="1080px" ForeColor="#333333" GridLines="None"
onselectedindexchanged="GridView1_SelectedIndexChanged"> <AlternatingRowStyle BackColor="White" /> <Columns> <asp:BoundField DataField="编号" HeaderText="编号" ReadOnly="True" SortExpression="编号" /> <asp:BoundField DataField="教师" HeaderText="教师" SortExpression="教师" /> <asp:BoundField DataField="征订代号" HeaderText="征订代号" SortExpression="征订代号" /> <asp:BoundField DataField="课程名称" HeaderText="课程名称" SortExpression="课程名称" /> <asp:BoundField DataField="教材名称" HeaderText="教材名称" SortExpression="教材名称" /> <asp:BoundField DataField="出版社" HeaderText="出版社" SortExpression="出版社" /> <asp:BoundField DataField="作者" HeaderText="作者" SortExpression="作者" /> <asp:BoundField DataField="版次" HeaderText="版次" SortExpression="版次" /> <asp:BoundField DataField="学期" HeaderText="学期" SortExpression="学期" /><asp:CommandField ShowDeleteButton="True" /><asp:CommandField ShowEditButton="True" /> </Columns> <EditRowStyle BackColor="#2461BF" /> <FooterStyle BackColor="#507CD1" ForeColor="White" Font-Bold="True" /> <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <PagerStyle ForeColor="White" HorizontalAlign="Center" BackColor="#2461BF" /> <RowStyle BackColor="#EFF3FB" /> <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#F5F7FB" /> <SortedAscendingHeaderStyle BackColor="#6D95E1" /> <SortedDescendingCellStyle BackColor="#E9EBEF" /> <SortedDescendingHeaderStyle BackColor="#4870BE" /> </asp:GridView><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:connString %>" SelectCommand="SELECT [教师], [征订代号], [课程名称], [教材名称], [出版社], [作者], [版次], [学期] FROM [教材信息表]"></asp:SqlDataSource></div>
哈哈。。。。对,这上边的代码都没有问题,来看下面这个Page_Load方法,忽然浑天中霹出一亮闪光!!!发现没有??你每一次一点更新,每次更新后会自动刷新,所以永远取不到更新的值,取列的值都是原來的,并不是更新后的。原因终于真相大白了:是因为Page_Load中加载了数据,每次更新后会自动更新!
解决方案:必须在Page_Load中判断一下是否页面回传,在进行加载。所以得加下面代码:`protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { GridView1.Attributes.Add(“style”, “”); GridDataBind(); } }`
|