cxGrid增加一欄顯示checkBox的設置方法

鑑於本人首次設定cxGrid的CheckBox的時候費了很大勁,發現很多人都會碰到這個問題,現在總結一下,以供各位互相學習借鑑。

步驟如下(不分先後):

1、 cxGrid添加完自己所需的所有字段後,增加一個字段用來顯示CheckBox勾選框,比如叫做Selected(至於Caption要不要設定,看你自己喜歡是否想看到欄位名稱了),那麼tableview中此字段的DataBinding下面的FieldName就設爲Selected,並注意Options中的Editing要爲True,還要定Properties屬性的ValueChecked屬性和ValueUnchecked屬性,這裏比如分別設定爲'Y','N'。

2、設定cxGrid所連接的DataSource對應的ClientDataset,編輯ClientDataset,增加自己正常需要的所有字段,然後再增加一個單獨作爲我們設定的用來顯示勾選的字段,前面已經有名字了'Selected'(寬度設定大於2個字節都可以了,也就是爲了保存之前設定的'Y'或者'N',屬性是WildString),需要注意的是:FieldType一定要選擇fkInternalCalc,當然FieldName也是'Selected'。

3、在cxGrid的TableView的OnCellDblclick事件中寫勾選與否的點擊處理代碼,比如如下例子:

procedure TfrmImmunIseplanAdd.cxGrid1DBTableView1CellDblClick(
  Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
begin
  inherited;
  cdsGROWSORT.Edit ;
  if cdsGROWSORT.FieldByName('Selected').AsString ='N' then
    cdsGROWSORT.FieldByName('Selected').AsString:='Y'
  else
    cdsGROWSORT.FieldByName('Selected').AsString:='N';
end;

4、初始化勾選欄位,否則就是灰色的而且已經勾選了,如何初始化,基本上就是遍歷ClientDataSet然後把'Selected'字段值賦值爲'N',也就是非勾選狀態。比如如下例子:

  if (cdsGROWSORT.Active) and (cdsGROWSORT.RecordCount>0) then
  begin
    cdsGROWSORT.First;
    while not cdsGROWSORT.Eof do
    begin
      cdsGROWSORT.Edit ;
      cdsGROWSORT.FieldByName('Selected').AsString :='N';
      cdsGROWSORT.Next;
    end;
  end;

注意:如果說cxGrid有很多數據記錄要在窗口打開的時候就顯示出來,那麼你的ClientDataset的SQL語句不可以有'Selected'這個字段,也就是說這個字段不在你的數據查詢記錄中,不和數據庫關聯。

以上四個步驟不分先後,只要一一都這樣設定一定可以實現想要的勾選框了。第一次寫,呵呵,還真是費腦筋,就當作給自己一個加深印象的事情吧,呵呵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章