DBGrid的使用問題? |
尚未結案
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
引言: Q1:如何使DBGrid的Column寬度依資料大小自動調整? 使用Canvas.TextWidth(Fields[index].DisplayText)來抓出dataset.fields[index]的值顯示的width Q2:1)在Form1 中使用 ADOqueryForm1 向Table1增加記錄 2)然後,在Form2 中使用 ADOqueryForm2從 Table1查詢記錄 但是新增加的記錄不能查找的,請問該如何考慮?謝謝! 判斷 dbgrid.datasource.dataset.state是否為browse發表人 - hahalin 於 2003/09/07 20:49:28 |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hello 第一個問題
自動調整DBGrid欄位寬度 procedure AdjustColumnWidths(DBGrid: TDBGrid); var TotalColumnWidth, ColumnCount, GridClientWidth, Filler, i: Integer; begin ColumnCount := DBGrid.Columns.Count; if ColumnCount = 0 then Exit; // compute total width used by grid columns and vertical lines if any TotalColumnWidth := 0; for i := 0 to ColumnCount-1 do TotalColumnWidth := TotalColumnWidth DBGrid.Columns[i].Width; if dgColLines in DBGrid.Options then // include vertical lines in total (one per column) TotalColumnWidth := TotalColumnWidth ColumnCount; // compute grid client width by excluding vertical scroll bar, grid indicator, // and grid border GridClientWidth := DBGrid.Width - GetSystemMetrics(SM_CXVSCROLL); if dgIndicator in DBGrid.Options then begin GridClientWidth := GridClientWidth - IndicatorWidth; if dgColLines in DBGrid.Options then Dec(GridClientWidth); end; if DBGrid.BorderStyle = bsSingle then begin if DBGrid.Ctl3D then // border is sunken (vertical border is 2 pixels wide) GridClientWidth := GridClientWidth - 4 else // border is one-dimensional (vertical border is one pixel wide) GridClientWidth := GridClientWidth - 2; end; // adjust column widths if TotalColumnWidth < GridClientWidth then begin Filler := (GridClientWidth - TotalColumnWidth) div ColumnCount; for i := 0 to ColumnCount-1 do DBGrid.Columns[i].Width := DBGrid.Columns[i].Width Filler; end else if TotalColumnWidth > GridClientWidth then begin Filler := (TotalColumnWidth - GridClientWidth) div ColumnCount; if (TotalColumnWidth - GridClientWidth) mod ColumnCount <> 0 then Inc(Filler); for i := 0 to ColumnCount-1 do DBGrid.Columns[i].Width := DBGrid.Columns[i].Width - Filler; end; end;我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
Q1.使用Miles前輩的方法時出現的兩個問題:
1)有時不能使Column的度依料大小自動調整?
現在發現:
這是因為我使用了DBGrid的DrawDataCell Event,讓相近兩行顯示不同顏色,Code如下:
if ADOQuery1.RecNo mod 2 = 0 then begin (Sender as TDBGrid).Canvas.Brush.Color := clLime ; (Sender as TDBGrid).Canvas.Font.Color:=clBlack; end else begin ( Sender as TDBGrid).Canvas.Brush.Color := clwhite ; (Sender as TDBGrid).Canvas.Font.Color:=clBlack; end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);因此讓procedure AdjustColumnWidths(DBGrid:TDBGrid);的設定效果無效, 如果在上邊Code 的最後加上: AdjustColumnWidths(DBGrid1); 則可以不僅使Column的度依料大小自動調整,而且使相近兩行顯示不同顏色,但是這樣做眼睛受不了,現在還不知道如何改進,希望各位先進指點! 2)有時一些Column不能示? 這個原因還不清楚,當程式執行時,DBGrid中的一些Column相互重疊,甚至一些Column被隱藏 如圖所示: 共有6個Column,分別是AAAA,BBBB,CCCC,DDDD,EEEE,FFFF 程式執行時,可以看到CCCC和EEEE有部分重疊的地方,DDDD已經被隱藏 |
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |