不該錯的問題:IsPostBack in ASP.NET, Programming with DataGrid

來源:互聯網
上載者:User

唉,現在才發現,原來在ASP.NET中IsPostBack屬性是多麼的重要......

一般是在page_load中檢查是否是第一次載入本頁或是判斷是否是使用者提交(PostBack)
if (!IsPostBack) {
//do something
}
在用DataGrid訪問和更新資料庫時沒有注意到這個問題,會出現各種各樣的奇怪問題,比如我的這種.

問題描述:
        用DataGrid訪問和更新資料庫(SQL Server --Northwind --table name:categories --Query :select categoryID,categoryName,Description form categories ),除了更新操作以外,其它功能OK.對DataGrid進行如下操作:點擊“編輯”,相應的行資料變為可編輯,同時編輯按鈕被“更新”和“取消”代替。對資料進行編輯,如把Description中的AAA改為BBB。再點“更新”按鈕。本意是想用此方法將修改後的資料(BBB)代替資料庫中原有的AAA,當然是用Update方法了。但在點“更新”後,資料沒有改變,我做過測試,UPDATE方法是有效,也就是說,UPDATE方法更新的不是新資料,而是沒有修改前的舊資料,造成資料沒有更新(實際上是更新了)。要注意的是我的Page_Load事件如下
private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此處放置使用者代碼以初始化頁面
   OleAd.Fill(ds);//OleAd--oledbAdapter
   dg.DataBind();//dg--DataGrid
  }

分析問題(個人推測,請指正):
        由於沒有用IsPostBack判斷是否是第一次載入此頁面,所以不管什麼情況下只要有PostBack,都會對dg(DataGrid)進行資料繫結。所以在進行任何的sumbit後,dg都會去資料庫綁定資料而不理會頁面中的資料。
        當對選中的資料進行修改完畢後,在點“更新”時,提交此頁面修改的資料,而馬上遇到Page_Load事件,不等對修改資料進行處理,伺服器就先產生原頁面(MS用這種方法提高速度?),發現dg.DataBind(),執行之,於是放棄資料庫更新,於是看不到更新結果了。

解決問題:
        解決倒是很簡單,Page_Load事件中加上對IsPostBack的判斷就可以了。
private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此處放置使用者代碼以初始化頁面
   OleAd.Fill(ds);//OleAd--oledbAdapter
    if(!IsPostBack)
{
   dg.DataBind();//dg--DataGrid
}
  }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.