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

DBGrid之Columns屬性的問題

答題得分者是:sos_admin
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-29 17:24:09 IP:63.84.xxx.xxx 未訂閱
請教各位前輩﹒    該如何利用DBGrid元件來作Add Columns欄位﹖是使用DBGrid.Column.Add的方法嗎﹖若是的話﹐那Add之后該寫什么呢﹖感謝賜教﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-29 17:43:11 IP:61.155.xxx.xxx 未訂閱
var col:Tcolumn; begin col:=DBGrid1.Columns.Add; col.Title.Caption :='AAcol'; //col.Field.FieldName :='field1'; ..... end;
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-29 17:45:28 IP:63.84.xxx.xxx 未訂閱
感謝前輩回應﹒    小弟的意思是指想增加目前資料表中已有的某個欄位名﹒ 不好意思﹐沒有把問題講清楚﹒    再次感謝﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-29 17:59:27 IP:61.155.xxx.xxx 未訂閱
col.Field.FieldName :='field1'; 给这一句赋予字段名不久可以了
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-29 18:14:57 IP:63.84.xxx.xxx 未訂閱
感謝﹒    比如說資料表中的欄位名有'訂單編號','客戶編號','產品編號','數量','訂購日期'五個﹒    現在我需要DBGrid中只顯示'訂單編號','產品編號','訂購日期'這三個欄位名﹐該如何處理﹖    DBGrid的編輯器可以加入All Fields﹐并加以控制(設計時期可直接指定DBGrid只顯示哪些欄位名)﹐而資料集元件(如ADOQuery)也可用編輯器加入All Fields﹐并加以控制(也可設計時期直接指定出現的欄位名)﹐那么欄位名在DBGrid中的顯示控制是否也可用ADOQuery的Fields屬性來寫﹖    感謝﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-29 18:37:20 IP:61.155.xxx.xxx 未訂閱
現在我需要DBGrid中只顯示'訂單編號','產品編號','訂購日期'這三個欄位名﹐該如何處理﹖ 右键一个一个添加,然后设置!    那么欄位名在DBGrid中的顯示控制是否也可用ADOQuery的Fields屬性來寫﹖    这是对于一个空的dbgrid的动态添加栏位及动态赋予对应的字段 var i:integer; begin adoquery1.Open ;    if (DBGrid1.Columns.Count<3) then for i:=DBGrid1.Columns.Count to 3 do DBGrid1.Columns.Add ; for i:=0 to 3 do DBGrid1.Columns[i].FieldName :=adoquery1.Fields[i].FieldName ; end;
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-29 19:18:15 IP:218.165.xxx.xxx 未訂閱
引言: 感謝﹒ 比如說資料表中的欄位名有'訂單編號','客戶編號','產品編號','數量','訂購日期'五個﹒ 現在我需要DBGrid中只顯示'訂單編號','產品編號','訂購日期'這三個欄位名﹐該如何處理﹖ DBGrid的編輯器可以加入All Fields﹐并加以控制(設計時期可直接指定DBGrid只顯示哪些欄位名)﹐而資料集元件(如ADOQuery)也可用編輯器加入All Fields﹐并加以控制(也可設計時期直接指定出現的欄位名)﹐那么欄位名在DBGrid中的顯示控制是否也可用ADOQuery的Fields屬性來寫﹖ 感謝﹗ ===================== 努力,相信會獲得美麗! 忻晟
procedure TForm1.Button1Click(Sender: TObject); begin if not adoquery1.Active then adoquery1.Open ; DBGrid1.Columns[0].FieldName:='訂單編號'; DBGrid1.Columns[1].FieldName:='產品編號'; DBGrid1.Columns[2].FieldName:='訂購日期'; end; TRY TRY SEE
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-30 11:37:26 IP:63.84.xxx.xxx 未訂閱
謝謝兩位前輩﹒    但還是沒有結果﹐小弟把問題講得詳細一些﹕ 當資料表Open時﹐利用CheckListBOx來擷取所有的欄位名稱﹐并處于勾選狀態﹐若使用者在CheckListBox中做勾選內容的變動后﹐DBGrid元件也對應只顯示在CheckListBox中有勾選狀態的欄位﹐未勾選的欄位則不做顯示﹒前段程式碼如下﹕
procedure TForm1.ADOQuery1AfterOpen(DataSet: TDataSet);
var
  I,J : Integer;
begin
  CheckListBox1.Items.Clear;
  For I:=0 To ADOQuery1.FieldCount-1 do
      CheckListBox1.Items.Add(ADOQuery1.Fields[I].FieldName);
  For J:=0 To CheckListBox1.Items.Count-1 do
      CheckListBox1.Checked[J] := True;
end;
此時已經將資料表所有的欄位名都讀入CheckListBox中﹐并全部呈勾選狀態﹐接下來該如何處理就是小弟的問題﹐照兩位前輩所指點的試了好久﹐還是不得理﹐故請前輩再為指教﹐感謝﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-30 13:27:35 IP:61.155.xxx.xxx 未訂閱
unit Unit1;    interface    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, DB, ADODB, StdCtrls, CheckLst, Grids, DBGrids;    type   TForm1 = class(TForm)     CheckListBox1: TCheckListBox;     Button1: TButton;     ADOQuery1: TADOQuery;     DataSource1: TDataSource;     DBGrid1: TDBGrid;     Button2: TButton;     procedure ADOQuery1AfterOpen(DataSet: TDataSet);     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;    var   Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.ADOQuery1AfterOpen(DataSet: TDataSet); var   I,J : Integer; begin   CheckListBox1.Items.Clear;   For I:=0 To ADOQuery1.FieldCount-1 do       CheckListBox1.Items.Add(ADOQuery1.Fields[I].FieldName);   For J:=0 To CheckListBox1.Items.Count-1 do       CheckListBox1.Checked[J] := True; end;    procedure TForm1.Button1Click(Sender: TObject); begin adoquery1.Open ; end;    //根据选择框动态改变 procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin dbgrid1.DataSource :=DataSource1; dbgrid1.Columns.Clear ; for i:=0 to CheckListBox1.Count-1 do begin dbgrid1.Columns.Add; dbgrid1.Columns[i].FieldName:=CheckListBox1.Items.Strings[i]; if checklistbox1.Checked[i] then dbgrid1.Columns[i].Visible :=true else dbgrid1.Columns[i].Visible :=false; end; end; end.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-30 14:14:53 IP:63.84.xxx.xxx 未訂閱
感謝sos_admin前輩的指點﹒    原來是使用Column[].Visible屬性來達到這樣的效果﹐我一直在Add和Delete上面打轉﹐感謝不盡﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-05-11 21:55:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!