国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

DBGrid使用全書(五)

2019-11-18 18:09:23
字體:
來源:轉載
供稿:網友
 

在DBGrid中,怎樣才能讓我能點擊一個單元格選擇整行,又可以編輯單元格的內容呢?
在設計過程中,有時候數據較大量,field 較多的時候,只是點擊單元格可能會對某個field的數據誤操作(如數據錯行),為此才會想到這個問題,解決辦法如下:
    點擊單元格就改當前行顏色。這個辦法也算是沒辦法的辦法吧!

type
 TMyDBGrid=class(TDBGrid);
//////////////////////////////////
//DBGrid1.Options->dgEditing=True
//DBGrid1.Options->dgRowSelect=False
PRocedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 with TMyDBGrid(Sender) do
 begin
   if DataLink.ActiveRecord=Row-1 then
   begin
     Canvas.Font.Color:=clWhite;
     Canvas.Brush.Color:=$00800040;
   end
   else
   begin
     Canvas.Brush.Color:=Color;
     Canvas.Font.Color:=Font.Color;
   end;
   DefaultDrawColumnCell(Rect,DataCol,Column,State);
 end;
end;

測試通過(d7)!

有關雙擊dbgrid排序的問題(想讓用戶雙擊dbgird控件的某一個字段時就升序,再雙擊就降序....?)
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
 temp, title: string;
begin
 temp := Column.FieldName;
 qusp.Close;
 if Column.Index <> lastcolumn then
 begin
   if (Pos('↑', DBGrid1.Columns[LastColumn].Title.Caption) > 0) or (Pos('↓', DBGrid1.Columns[LastColumn].Title.Caption) > 0) then
     DBGrid1.Columns[LastColumn].Title.Caption := Copy(DBGrid1.Columns[LastColumn].Title.Caption, 3, Length(DBGrid1.Columns[LastColumn].Title.Caption) - 2);
   qusp.Sql[icount] := 'order by ' + temp + ' asc';
   DBGrid1.Columns[Column.Index].Title.Caption := '↑' + DBGrid1.Columns[Column.Index].Title.Caption;
   lastcolumn := column.Index;
 end
 else
 begin
   LastColumn := Column.Index;
   title := DBGrid1.Columns[LastColumn].Title.Caption;
   if Pos('↑', title) > 0 then
   begin
     qusp.Sql[icount] := 'order by ' + temp + ' desc';
     Delete(title, 1, 2);
     DBGrid1.Columns[LastColumn].Title.Caption := '↓' + title;
   end
   else if Pos('↓', title) > 0 then
   begin
     qusp.Sql[icount] := 'order by ' + temp + ' asc';
     Delete(title, 1, 2);
     DBGrid1.Columns[LastColumn].Title.Caption := '↑' + title;
   end
   else
   begin
     qusp.Sql[icount] := 'order by ' + temp + ' asc';
     DBGrid1.Columns[LastColumn].Title.Caption := '↑' + title;
   end;
 end;
 qusp.Open;
end;

 

 DbGrid控件隱藏或顯示標題欄DbGrid控件隱藏或顯示標題欄

1、 新建一個帶兩個參數的過程(第1個參數是菜單對象,第2 個是DbGrid控件):
    Procedure ViewTitle(Sender:TObject;DbgColumns:TDBGrid);
    //隱藏或顯示DbGrid標題欄

  2、 然后按Ctrl+Shift+C組合鍵,定義的過程會在實現部分出現。
    Procedure FrmStock.ViewTitle(Sender:TObject;DbgColumns:TDBGrid);
    begin
      With (Sender as TMenuItem) do
      begin
        Checked:=not Checked;
        DbgColumns.Columns[Tag].Visible:=Checked;
      end;
    end;

  3、 把菜單子項的Tag設置成跟DbGrid的Columns值相對應,比如:
    DbGrid有一個標題欄是‘日期‘在第0列,然后把要觸法該列的菜單的Tag設置成0。

  4、 把菜單的OnClick事件選擇ViewTitle該過程。
 
  DBGrid 對非布爾字段的欄中如何出現 CheckBox 選擇輸入可將dbgrid關聯的dataset中需顯示特殊內容字段設為顯式字段
在OnGetText事件中寫如下代碼:
以table舉例:
procedure TForm1.Table1Myfield1GetText(Sender: TField;
 var Text: String; DisplayText: Boolean);
var Pd:string;
begin
 inherited;
 pd:=table1.fieldbyname('myfield1').asstring;
 if pd='1' then
     Text:='□'
 else
     if pd='2' then
        text:='▲'
     else
        Text:='√';
end;


用 dbgrid 或 dbgrideh 如何讓所顯示數據自動滾動?

procedure TForm1.Timer1Timer(Sender: TObject);
var
m:tmessage;
begin
 m.Msg:=WM_VSCROLL;
 m.WParamLo:=SB_LINEDOWN;
 m.WParamHi:=1 ;
 m.LParam:=0;
 postmessage(self.DBGrid1.Handle,m.Msg,m.WParam,m.LParam);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
self.Timer1.Enabled:=true;
end; 

如果需要讓他自動不斷地從頭到尾滾動,添加如下代碼
if table1.Eof then table1.First;  

關于DBGrid中下拉列表的兩種設計比較

一、DBGrid 中 的 下 拉 列 表
    在 DBGrid 網格中實現下拉列表,設置好 DBGrid 中該字段的 PickList 字符串列表、初始的序號值 DropDownRows 即可。以職工信息庫中的籍貫字段(字符串類型)為例,具體設計步驟如下:
    1、在窗體上放置 Table1、DataSource1、DBGrid1、DBNavigator1 等控件對象,按下表設置各個對象的屬性:

---------------------------------------
對象           屬性          設定值
---------------------------------------
Table1         DataBase      sy1
               TableName     zgk.dbf //職工信息庫
               DataSource1   DataSet Table1
DbGrid1        DataSource    DataSource1
DBNavigator1   DataSource    Datasource1
-------------------------------------------

    2、雙擊 Table1,在彈出的 Form1.Table1 窗口中,用右鍵彈出快捷菜單,單擊 Add Fields 菜單項;選擇所有的字段后,按 OK 按鈕。

    3、修改第 2 步新增字段的 DisplayLabel 屬性。以 Table1ZGBH 字段為例, 在 Object Inspector 窗口中選擇 Table1ZGBH,修改屬性 DisplayLabel= 職工編號,其余字段類似。
 
    4、雙擊 DBGrid1,在彈出的 Editing DBGrid1.Columns 窗口中, 單擊 Add all Fields 按鈕,增加 Table1 的所有字段。

    5、在 Editing DBGrid1.Columns 窗口,選擇 jg 這一行,切換到 Object Inspector 窗口,修改它的 PickList.Strings 為
“湖北枝江市
  北京市
  河南平頂山市
  浙江德清市”

    6、在 Form1.Oncreate 事件中寫入語句:

    Table1.Open;

    7、F9 運行,用鼠標點擊某個記錄的籍貫字段,右邊即出現一個按鈕,點擊這個按鈕,可出現一個下拉列表,包含第 5 步中輸入的四行字符串,可用鼠標進行選擇。當然也可以自行輸入一個并不屬下拉列表中的字符串。


二、DBGrid 中 的 查 找 字 段
    所謂查找字段(LookUp Field),即 DBGrid中的某個關鍵字段的數值來源于另外一個數據庫的相應字段。運用查找字段技術,不僅可以有效的避免輸入錯誤,而且 DBGrid 的顯示方式更為靈活,可以不顯示關鍵字段,而顯示源數據庫中相對應的另外一個字段的數據。

    例如,我們在 DBGrid 中顯示和編輯職工信息,包括職工編號、職工姓名、籍貫、所在單位編號,而單位編號來源于另一個數據庫表格——單位庫,稱“單位編號”為關鍵字段。如果我們直接顯示和編輯單位編號的話,將會面對 1、2、3 等非常不直觀的數字,編輯時極易出錯。但是如果顯示和編輯的是單位庫中對應的單位名稱話,將非常直觀。這就是 DBGrid 的所支持的查找字段帶來的好處。

    實現 DBGrid 的查找字段同樣不需要任何語句,具體設計步驟如下:
    1、在窗體上放置 Table1、Table2、DataSource1、DBGrid1、DBNavigator1 等控件對象,按下表設置各個對象的屬性:
---------------------------------------
對象         屬性        設定值
---------------------------------------
Table1       DataBase    sy1
             TableName   zgk.dbf //職工信息庫
Table2       DataBase    sy1
             TablenAME   dwk.dbf //單位信息庫
DataSource1  DataSet     Table1
DbGrid1      DataSource  DataSource1
DBNavigator1 DataSource  Datasource1
------------------------------------------

    2、雙 擊Table1,在彈出的 Form1.Table1 窗口中,用右鍵彈出快捷菜單,單擊 Add Fields 菜單項;選擇所有的字段后,按 OK 按鈕。

    3、修改第 2 步新增字段的 DisplayLabel 屬性。以 Table1ZGBH 字段為例,在 Object Inspector 窗口中選擇 Table1ZGBH,修改屬性 DisplayLabel= 職工編號,其余字段類似。

    4、設置 Table1DWBH.Visible=False。

    5、在 Form1.Table1 窗口,用右鍵彈出快捷菜單,單擊 New Field 菜單項,新增一個查找字段 DWMC,在彈出的窗口設置相應的屬性,按 OK 按鈕確認;在 Object Inspector 窗口,設置 Table1DWMC.DisplayLabel= 單位名稱。

     6、在 Form1.Oncreate 事件中寫入語句:
     Table1.Open;

     7、按 F9 運行,當光標移至某個記錄的單位名稱字段時,用鼠標點擊該字段,即出現一個下拉列表,點擊右邊的下箭頭,可在下拉列表中進行選擇。在這里可以看出,下拉列表的內容來自于單位信息庫,并且不能輸入其他內容。


    三、DBGrid 中的下拉列表和查找字段的區別
    雖然 DBGrid 中的下拉列表和查找字段,都是以下拉列表的形式出現的,但兩者有很大的差別。

    1、用 PickList 屬性設置的下拉列表,它的數據是手工輸入的,雖然也可以在程序中修改,但動態特性顯然不如直接由另外數據庫表格提取數據的查找字段。

    2、用 PickList 屬性設置的下拉列表,允許輸入不屬于下拉列表中的數據,但查找字段中只能輸入源數據庫中關鍵字段中的數據,這樣更能保證數據的完整性。

    3、用 PickList 屬性設置的下拉列表設計較為簡單。


上一篇:關于Msyql的事務

下一篇:DBGrid使用全書(三)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 襄汾县| 敦煌市| 获嘉县| 汉中市| 成都市| 铁岭县| 青龙| 托克托县| 绩溪县| 黄大仙区| 巴彦县| 安塞县| 新巴尔虎左旗| 松江区| 莆田市| 兴业县| 屯门区| 韩城市| 黎城县| 盘山县| 南通市| 古浪县| 合江县| 从江县| 平乐县| 寻乌县| 锦州市| 舟曲县| 沛县| 奎屯市| 安陆市| 呼伦贝尔市| 新乐市| 防城港市| 乌鲁木齐县| 松滋市| 平昌县| 宝丰县| 永丰县| 临泽县| 保定市|