DBGrid和DBNavigator的使用問題? |
答題得分者是:channel
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
各位先進好!
Q1:
我的程式中有1個DBgrid和1個DBNavigator並連接相同的Datasource ,希望按DBNavigator的Insert按鈕,寫入一條記錄按Post(DBNavigator)按鈕後,DBgrid能夠根據某一Column排序,請問該如何解決? Q2:
我希望下面的Code使DBNavigator的按鈕可以顯示Hint,但是執行時卻看不到Hint,請問原因並該如何解決?
Code如下:
procedure TForm1.FormCreate(Sender: TObject); begin with DBNavigator1 do for ix := 0 to ControlCount - 1 do if Controls[ix] is TNavButton then with Controls[ix] as TNavButton do case index of nbFirst: Hint := 'First'; nbPrior: Hint := 'Prior'; nbNext: Hint := 'Next'; nbLast: Hint := '4567'; end; end; |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 各位先進好! Q1: 我的程式中有1個DBgrid和1個DBNavigator並連接相同的Datasource ,希望按DBNavigator的Insert按鈕,寫入一條記錄按Post(DBNavigator)按鈕後,DBgrid能夠根據某一Column排序,請問該如何解決?若使用ADO,則可利用屬性Sort作排序。 ex: procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet); begin ADOQuery1.Sort := 'LastName ASC, DateDue DESC'; end; 引言: Q2: 我希望下面的Code使DBNavigator的按鈕可以顯示Hint,但是執行時卻看不到Hint,請問原因並該如何解決? Code如下:DBNavigator1的屬性ShowHint必須設為True即可。procedure TForm1.FormCreate(Sender: TObject); begin with DBNavigator1 do for ix := 0 to ControlCount - 1 do if Controls[ix] is TNavButton then with Controls[ix] as TNavButton do case index of nbFirst: Hint := 'First'; nbPrior: Hint := 'Prior'; nbNext: Hint := 'Next'; nbLast: Hint := '4567'; end; end;
------
~小弟淺見,參考看看~ |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
iva0629
一般會員 發表:28 回覆:14 積分:8 註冊:2003-08-13 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
cashxin2002前輩一直都是這麼熱心回答大家的問題,真是古道熱腸,欽佩! 另外,iva0629您好,看看這篇文章是否對您有幫助.
http://www.ccw.com.cn/htm/app/aprog/01_2_22_2.asp
procedure TForm1.Button1Click(Sender:TObject); begin Table1.Open; // 打開Table1關聯的表Student end;發表人 - mathewzhao 於 2003/11/29 11:24:40 |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
Button2(關閉表單)的Click事件代碼如下:
procedure TForm1.Button2Click(Sender:TObject);
begin
Application.Terminate;
end; DBGrid1的TitleClick事件代碼如下: //注:本過程參數Column包含的信息量非常多
procedure TForm1.DBGrid1TitleClick(Column:TColumn);
begin
MySort(DBGrid1,Column); //調用字段排序
end;
其中,MySort(DBGrid1,Column)為自定義的排序過程,具體代碼見下述. 3.建立通用處理模塊
為使該功能具有'通用性',將其定義為一過程.
首先,預聲明過程及建立兩個全局私有變量:
... Type ... procedure MySort(DBGrid0:TDBGrid; Column: TColumn);//預聲明過程 private { Private declarations } psIndexName:string; //記錄當前索引名稱 plAscend:boolean; //記錄當前索引名稱的索引狀態 public { Public declarations } end;其次,該過程完整代碼如下: procedure TForm1.MySort(DBGrid0: TDBGrid; Column: TColumn); var //本模塊使用到的psIndexName,plAscend兩個變量見上定義 mode: char; //記錄是'升序',還是'降序' ColName: string; //記錄當前字段名 iCol: Integer; //記錄當前列號 begin with DBGrid0.DataSource.DataSet as TTable do //Table0 begin //檢測當前工作表是否已打開 if not Active then begin MessageBeep(0); Application.MessageBox('工作表尚未打開!','停止' , MB_OK MB_ICONSTOP); Abort end; //檢測當前字段是否'能排序'.以下字段類型不能排序 case Column.Field.DataType of ftBoolean, ftBytes, ftBlob, //Binary ftMemo, ftGraphic, ftFmtMemo, //Formatted memo ftParadoxOle: //OLE begin MessageBeep(0); Application.MessageBox(Pchar('項目'' ' Column.FieldName ' '' ' '不能排序!'), '停止',MB_OK MB_ICONSTOP); Abort end; end; //case mode := '0'; iCol := Column.Field.FieldNo - 1; try ColName := Column.fieldname; if psIndexName = Column.fieldname then begin //與原來同列 if plAscend then //升序 begin mode := '2'; IndexName := ColName '2'; //應'降序' end else begin mode := '1'; IndexName := ColName '1'; //應'升序' end; plAscend := not plAscend; end else begin //新列 IndexName := ColName '2'; plAscend := false; psIndexName := ColName; end; except |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
on EDatabaseError do //若未有索引,則重新建立 begin Messagebeep(0); //以下新建索引 IndexName := ''; Close; Exclusive := true; if mode = '1' then AddIndex(ColName + '1', ColName, [ixCaseInsensitive], '') else //轉換'0' AddIndex(ColName + '2', ColName, [ixDescending, ixCaseInsensitive], ''); Exclusive := false; Open; try //try 1 if mode <> '1' then begin mode := '2'; //轉換 plAscend := false; end else plAscend := true; IndexName := ColName + mode; psIndexName := ColName; except on EDBEngineError do IndexName := ''; end //try 2 end end; First; end; //with DBGrid0.SelectedIndex := iCol; end; //End of MySort如圖所示,當對“日期型”的“出生日期”單擊產生的排序結果。 本過程已對所有可能的錯誤進行了相應的檢測及處理,代碼是比較完整的.因此,把該過程放入你相應的單元中,對每一個DBGrid,只要傳遞不同的DBGrid及Column參數,就能實現對應資料表的自動排序處理,而事先只為某字段建立一關鍵索引即可,其它Secondery Indexes的建立均在程序中自動完成,但會為每一個建立了索引的字段生成了一些附加文件(如*.XG?,*.YG?等)。當然若有必要,可以在表單關閉前將所有的附加文件刪除。 發表人 - mathewzhao 於 2003/11/29 11:26:58 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |