GridView_RowUpdating點(diǎn)擊更新時(shí)取不到新值
這兩天幫朋友解決一個(gè)Bug,代碼讀了好就還是找不出問題在哪,已經(jīng)郁悶得快死了,嗚嗚。。。。程序員改bug 傷不起啊。后面通過監(jiān)視、輸出查找,瀏覽器調(diào)試,終于找出來。
廢話不多說,來看下面:
后臺代碼:// string 編號, 教師, 征訂代號, 課程名稱, 教材名稱, 出版社, 作者, 版次, 學(xué)期;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 學(xué)期 = ((TextBox)(GridView1.Rows[rowNum].Cells[8].Controls[0])).Text.ToString();string sqlstr = "update 教材信息表 set 教師='" + 教師 + "',征訂代號='" + 征訂代號 + "',課程名稱='" + 課程名稱 + "', " + "教材名稱='" + 教材名稱 + "',出版社='" + 出版社 + "',作者='" + 作者 + "',版次='" + 版次 + "',學(xué)期='" + 學(xué)期 + "' where 編號='" + 編號 + "'";ExecuteSql(sqlstr);
前臺代碼: <div> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="編號,教師,征訂代號,課程名稱,教材名稱,出版社,作者,版次,學(xué)期" 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="學(xué)期" HeaderText="學(xué)期" SortExpression="學(xué)期" /><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 [教師], [征訂代號], [課程名稱], [教材名稱], [出版社], [作者], [版次], [學(xué)期] FROM [教材信息表]"></asp:SqlDataSource></div>
哈哈。。。。對,這上邊的代碼都沒有問題,來看下面這個(gè)Page_Load方法,忽然渾天中霹出一亮閃光?。?!發(fā)現(xiàn)沒有??你每一次一點(diǎn)更新,每次更新后會自動刷新,所以永遠(yuǎn)取不到更新的值,取列的值都是原來的,并不是更新后的。原因終于真相大白了:是因?yàn)镻age_Load中加載了數(shù)據(jù),每次更新后會自動更新!
解決方案:必須在Page_Load中判斷一下是否頁面回傳,在進(jìn)行加載。所以得加下面代碼:`protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { GridView1.Attributes.Add(“style”, “”); GridDataBind(); } }`
|