blog.Toby

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks

          唉,現在才發現,原來在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
          }
          ??}

          posted on 2006-08-17 15:13 渠上月 閱讀(205) 評論(0)  編輯  收藏 所屬分類: other tips
          主站蜘蛛池模板: 丰台区| 会理县| 天长市| 阜平县| 济源市| 泗水县| 黑水县| 额敏县| 托克托县| 长顺县| 福海县| 榆中县| 宁河县| 朔州市| 盐亭县| 西青区| 金昌市| 崇礼县| 南郑县| 类乌齐县| 永吉县| 鹿泉市| 怀化市| 婺源县| 达尔| 兴安县| 乌恰县| 许昌县| 育儿| 登封市| 阿瓦提县| 黄石市| 六枝特区| 新巴尔虎右旗| 正宁县| 金华市| 临湘市| 南江县| 新龙县| 楚雄市| 晋宁县|