全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1604
推到 Plurk!
推到 Facebook!

DBGrid的使用問題?

尚未結案
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-07 20:34:41 IP:202.100.xxx.xxx 未訂閱
Q1:如何使DBGrid的Column寬度依資料大小自動調整? Q2:1)在Form1 中使用 ADOqueryForm1 向Table1增加記錄 2)然後,在Form2 中使用 ADOqueryForm2從 Table1查詢記錄 但是新增加的記錄不能查找的,請問該如何考慮?謝謝!
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-07 20:47:09 IP:211.76.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-07 21:51:31 IP:219.145.xxx.xxx 未訂閱
謝謝hahalin前輩! 感謝您的回應! 如方便的話,請問前輩能否給出示例?謝謝!
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-08 09:09:48 IP:218.160.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-08 20:34:58 IP:202.100.xxx.xxx 未訂閱
感謝Miles前輩的指點! 您提供的參考方法經測試,發現: procedure AdjustColumnWidths(DBGrid:TDBGrid); 1)有時不能使Column的寬度依資料大小自動調整. 2)有時一些Column不能顯示 至於這些情況發生的原因至現在還不清楚,如果有那位先進知道原因請告知,謝謝! 發表人 - mathewzhao 於 2003/09/08 20:39:18
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-28 17:29:13 IP:219.145.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-29 15:21:31 IP:218.160.xxx.xxx 未訂閱
mathewzhao 您好: 不曉得方不方便將你的程式Mail給我, 我來試試看. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-05-18 5:46:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!