1. 程式人生 > >Dbgrid控制元件多重選擇的怪問題。BookMarkList,BookMark,使用書籤,用的ADOQuery控制元件。100分送上,急阿!!!請高手幫忙!

Dbgrid控制元件多重選擇的怪問題。BookMarkList,BookMark,使用書籤,用的ADOQuery控制元件。100分送上,急阿!!!請高手幫忙!

Dbgrid控制元件多重選擇的怪問題。BookMarkList,BookMark,使用書籤,用的ADOQuery控制元件。100分送上,急阿!!!請高手幫忙! ( 積分: 100 )<br />procedure TForm_ContinuPrnt.BitB_PrintClick(Sender: TObject);
Var
i,x:Integer;
BookMarkList:TBookMarkList ;
BookMark:TBookMark;
getClientCode,getPre,getThis,getFact,getPrice,getMoney,getName:String;
begin
With MyDataModule do
Begin
AQ_DataKeep.Close;
AQ_DataKeep.SQL.Clear;
AQ_DataKeep.SQL.Add('Select a.ClientCode,a.Years,a.Months,a.PreData,a.Thisdata,a.FactData,a.Price,a.AmountMoney,a.PrintMask,a.BankDeduct,b.ClientNo,b.ClientCode,b.AreaNo,b.UseName');
AQ_DataKeep.SQL.Add('From EdataKeep a,EClientInfo b');
AQ_DataKeep.SQL.Add('Where (a.ClientCode=b.ClientCode) And (b.AreaNo=:p

AA) And (a.Years=:pYY) And (a.Months=:pMM)');
AQ_DataKeep.SQL.Add('Order By b.ClientNo');
AQ_DataKeep.Parameters.ParamByName('pAA').Value:=getAreaNo;
AQ_DataKeep.Parameters.ParamByName('pYY').Value:= getYear;
AQ_DataKeep.Parameters.ParamByName('pMM').Value:= getmonth;
AQ_DataKeep.Prepared;
AQ_DataKeep.Open;

BookMark:=AQ_DataKeep.GetBookmark ; //....獲得書籤.......
BookmarkList:=Dbgrid1.SelectedRows; //。。。該行也有問題
x:=BookmarkList.Count; //。。。該行有問題,結果總是 0
Try
For i:=0 to BookmarkList.Count-1 do //因為BookmarkList.Count 總是0 ,程式不能對網格中選擇的多行資料操作
begin
AQ_DataKeep.GotoBookmark(Pointer(Dbgrid1.SelectedRows));
getClientCode:=AQ_DataKeep.FieldByname('ClientCode').AsString;
getPre:=AQ_DataKeep.FieldByname('PreData').AsString;
getThis:=AQ_DataKeep.FieldByname('ThisData').AsString;
getFact:=AQ_DataKeep.FieldByname('FactData').AsString;
getPrice:=AQ_DataKeep.FieldByname('Price').AsString;
getMoney:=AQ_DataKeep.FieldByname('AmountMoney').AsString;
getName:=AQ_DataKeep.FieldByname('useName').AsString;

end;
except
AQ_DataKeep.GotoBookmark(Bookmark) ;
AQ_DataKeep.FreeBookmark(Bookmark) ;
end;

end;

end;

DBgrid控制元件可以設定了Option中的dgMultiSelect 為true後,就可以在介面上按住Ctrl(contral)鍵,對網格的資料進行多個選擇。對資料多個選擇後,可以只對選擇的多行資料操作。但是,我用的資料控制元件是ADOQuery(就是程式中的AQ_DataKeep),因為BookmarkList.Count 總是0 ,程式不能對網格中選擇的多行資料操作,請問這是為什麼?
我用Ttable控制元件就一切都正常(資料庫是paradox)!用ADOQuery控制元件(資料庫是SQL 2000)就不行,請高手回答!

 

procedure TForm_ContinuPrnt.BitB_PrintClick(Sender: TObject);
Var
i,x:Integer;
BookMarkList:TBookMarkList ;
BookMark:TBookMark;
getClientCode,getPre,getThis,getFact,getPrice,getMoney,getName:String;
begin
With MyDataModule do
Begin
AQ_DataKeep.Close;
AQ_DataKeep.SQL.Clear;
AQ_DataKeep.SQL.Add('Select a.ClientCode,a.Years,a.Months,a.PreData,a.Thisdata,a.FactData,a.Price,a.AmountMoney,a.PrintMask,a.BankDeduct,b.ClientNo,b.ClientCode,b.AreaNo,b.UseName');
AQ_DataKeep.SQL.Add('From EdataKeep a,EClientInfo b');
AQ_DataKeep.SQL.Add('Where (a.ClientCode=b.ClientCode) And (b.AreaNo=:p

AA) And (a.Years=:pYY) And (a.Months=:pMM)');
AQ_DataKeep.SQL.Add('Order By b.ClientNo');
AQ_DataKeep.Parameters.ParamByName('pAA').Value:=getAreaNo;
AQ_DataKeep.Parameters.ParamByName('pYY').Value:= getYear;
AQ_DataKeep.Parameters.ParamByName('pMM').Value:= getmonth;
AQ_DataKeep.Prepared;
AQ_DataKeep.Open;

BookMark:=AQ_DataKeep.GetBookmark ; //....獲得書籤.......
BookmarkList:=Dbgrid1.SelectedRows; //。。。該行也有問題
x:=BookmarkList.Count; //。。。該行有問題,結果總是 0
Try
For i:=0 to BookmarkList.Count-1 do //因為BookmarkList.Count 總是0 ,程式不能對網格中選擇的多行資料操作
begin
AQ_DataKeep.GotoBookmark(Pointer(Dbgrid1.SelectedRows));
getClientCode:=AQ_DataKeep.FieldByname('ClientCode').AsString;
getPre:=AQ_DataKeep.FieldByname('PreData').AsString;
getThis:=AQ_DataKeep.FieldByname('ThisData').AsString;
getFact:=AQ_DataKeep.FieldByname('FactData').AsString;
getPrice:=AQ_DataKeep.FieldByname('Price').AsString;
getMoney:=AQ_DataKeep.FieldByname('AmountMoney').AsString;
getName:=AQ_DataKeep.FieldByname('useName').AsString;

end;
except
AQ_DataKeep.GotoBookmark(Bookmark) ;
AQ_DataKeep.FreeBookmark(Bookmark) ;
end;

end;

end;

DBgrid控制元件可以設定了Option中的dgMultiSelect 為true後,就可以在介面上按住Ctrl(contral)鍵,對網格的資料進行多個選擇。對資料多個選擇後,可以只對選擇的多行資料操作。但是,我用的資料控制元件是ADOQuery(就是程式中的AQ_DataKeep),因為BookmarkList.Count 總是0 ,程式不能對網格中選擇的多行資料操作,請問這是為什麼?
我用Ttable控制元件就一切都正常(資料庫是paradox)!用ADOQuery控制元件(資料庫是SQL 2000)就不行,請高手回答!

 

對DBGrid 進行多行選擇時,好像已經實現GetBookmark 了。你可以將如下該行:For i:=0 to BookmarkList.Count-1 do //因為BookmarkList.Count 總是0 ,程式不能對網格中選擇的多行資料操作
修改為:for i := 0 to Dbgrid1.SelectedRows.Count - 1 do
begin
Dbgrid1.DataSource.DataSet.GotoBookmark(pointer(Dbgrid1.SelectedRows.Items));

 

 

我已經自己搞定了。問題不在這裡!(zgj_gd)

問題在於資料集控制元件AQ_DataKeep,應該在其他地方開啟,因為每次重新開啟,介面上的

Dbgrid1.SelectedRows,與BookmarkList,bookMark 都是空了。

我要發分了,需要分的朋友近來拿分。