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”, “table-layout:fixed”);
GridDataBind();
}
}`