線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1234
推到 Plurk!
推到 Facebook!

應用程式開發的問題 - 使用 DataGrid 與 ToolBar...

尚未結案
chrischi
初階會員


發表:58
回覆:59
積分:28
註冊:2004-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-28 12:06:10 IP:61.218.xxx.xxx 未訂閱
各位好 請教一個應用程式開發的問題. 假設應用程式為 Windows Forms Application, 使用者於 DataGrid 修改資料後, 按 ToolBar 之按鈕執行 資料異動之作業, 程式碼概述如下 : DataGrid1 : DataGrid; <- 畫面上之元件(包含有查詢/儲存等按鈕) BDPConnection 1 : BDPConnection; DataAdapter1 : BDPDataAdapter; <- 自行宣告之物件(不是在 IDE 加入的) DataSet1 : DataSet; <- 自行宣告之物件(不是在 IDE 加入的) ToolBar1 : ToolBar; <- 畫面上之元件 ... procedure ToolBar1_ButtonClick(... var DeltaDataSet : DataSet; begin ToolBar1.Focus; <- 必要 if e.Button = 查詢按鈕 then begin DataSet1 := DataSet.Create; ...Fill DataSet1... DataGrid1.DataSource := DataSet1.Tables['MyTable']; end; if e.Button = 儲存按鈕 then begin CurrencyManager(BindingContext[DataGrid1.DataSource]).EndCurrentEdit; // 第一次按儲存按鈕 DeltaDataSet 為 nil, // 但第二次按儲存按鈕 DeltaDataSet 卻有值... DeltaDataSet := DataSet1.GetChanges; end; end; 程式操作步驟 : 1.於查詢後(假設查有資料), 使用者將輸入焦點移至 DataGrid 的任一筆記錄, 修改一欄位資料; 2.以滑鼠點選執行儲存之 ToolBarButton; 問題發生了, 當我第一次按儲存按鈕後呼叫 DataSet1.GetChanges 方法, 結果 DataSet1.GetChanges 卻回傳 nil, 明明在 DataGrid 有修改資料但 DataSet1.GetChanges 卻說沒有已修改的記錄, 但在 第二次按下儲存按鈕後 DataSet1.GetChanges 就會回傳已修改的記錄. 實在搞不懂為何會有這樣的差別...請指教. 謝謝 Chris
ATEIN
高階會員


發表:105
回覆:320
積分:125
註冊:2002-07-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-28 15:45:51 IP:203.204.xxx.xxx 未訂閱
您在trigger button 時會使load trigger Therefor : 請在FORM_LOAD加入-> if page.Ispostback then exit; 即可 DHM
------
ATEIN
chrischi
初階會員


發表:58
回覆:59
積分:28
註冊:2004-05-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-28 17:39:46 IP:61.218.xxx.xxx 未訂閱
 
各位好      請教一個應用程式開發的問題.      假設應用程式為 Windows Forms Application, 使用者於 DataGrid 修改資料後, 按 ToolBar 之按鈕執行
  資料異動之作業, 程式碼概述如下 :      DataGrid1 : DataGrid; <- 畫面上之元件(包含有查詢/儲存等按鈕)
  BDPConnection 1 : BDPConnection;
  DataAdapter1 : BDPDataAdapter; <- 自行宣告之物件(不是在 IDE 加入的)
  DataSet1 : DataSet; <- 自行宣告之物件(不是在 IDE 加入的)
  ToolBar1 : ToolBar; <- 畫面上之元件
  ...
  procedure ToolBar1_ButtonClick(...
  var
    DeltaDataSet : DataSet;
  begin
    ToolBar1.Focus; <- 必要
    if e.Button = 查詢按鈕 then
    begin
      DataSet1 := DataSet.Create;
      ...Fill DataSet1...
      DataGrid1.DataSource := DataSet1.Tables['MyTable'];
    end;
    if e.Button = 儲存按鈕 then
    begin
      CurrencyManager(BindingContext[DataGrid1.DataSource]).EndCurrentEdit;
      // 第一次按儲存按鈕 DeltaDataSet 為 nil, 
      // 但第二次按儲存按鈕 DeltaDataSet 卻有值...       
      DeltaDataSet := DataSet1.GetChanges; 
    end;
  end;      程式操作步驟 :         1.於查詢後(假設查有資料), 使用者將輸入焦點移至 DataGrid 的任一筆記錄, 修改一欄位資料;
    2.以滑鼠點選執行儲存之 ToolBarButton;
  
  問題發生了, 當我第一次按儲存按鈕後呼叫 DataSet1.GetChanges 方法, 結果 DataSet1.GetChanges 
  卻回傳 nil, 明明在 DataGrid 有修改資料但 DataSet1.GetChanges 卻說沒有已修改的記錄, 但在
  第二次按下儲存按鈕後 DataSet1.GetChanges 就會回傳已修改的記錄.      實在搞不懂為何會有這樣的差別...請指教.    謝謝    Chris    
chrischi
初階會員


發表:58
回覆:59
積分:28
註冊:2004-05-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-28 17:46:54 IP:61.218.xxx.xxx 未訂閱
經實驗證明, 使用 ToolBar 會有此一問題, 使用 Button 則只要按一下按鈕 就可以了...搞什麼 ToolBar, 問題更多... 不適合配合 DataGrid 開發資料庫 的程式, 氣死人了, 問題一堆 ;|
系統時間:2024-05-11 19:09:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!