cxGrid【过滤、排序】后获取选中记录的值和cxGrid空表判断

方法一:
使用函数GetRowValue
此方法在表格过滤、排序后也正常,

请注意:此代码顺序需要CXGRID的列顺序和ADOQUERY中SELECT的字段顺序一致,否则会取错。



procedure TfrmBillExtraction.pmGetBill_D_DatasClick(Sender: TObject);

var

 I,J : Integer;

begin

 with cxGDBTV_Bill_M.DataController,cxGDBTV_Bill_M.DataController.DataSet do

 begin

   for I := 0 to GetSelectedCount-1 do

   begin

     J := GetSelectedRowIndex(I);

     //取选中行,列名为sMergeNO的值

     ShowMessage(Trim(GetRowValue(GetRowInfo(J),FieldByName('sMergeNo').Index)));

   end;

 end;


方法二:
使用函数:GetValue
此方法开了过滤、排序后不正常,请大家注意。


procedure TfrmBillExtraction.pmGetBill_D_DatasClick(Sender: TObject);

var

 I,J : Integer;

begin

 with cxGDBTV_Bill_M.DataController,cxGDBTV_Bill_M.DataController.DataSet do

 begin

   for I := 0 to GetSelectedCount-1 do

   begin

     J := GetSelectedRowIndex(I);

     //取选中行,列名为sMergeNO的值

     ShowMessage(Trim(GetValue(J,FieldByName('sMergeNo').Index)));

   end;

 end;

end;





方法三:〖推荐〗

直接取表格的显示值,这个应该算是比较好的。经测试,拖动、分组、过滤等操作都不会影响取值。


for i:= 0 to AView.Controller.SelectedRowCount-1 do begin

  showmessage(AView.DataController.GetDisplayText(AView.Controller.SelectedRows[i].RecordIndex,AView.DataController.GetItemByFieldName('sMergeNo').Index));

end;


判断cxGrid是否为空表

if cxGridDBTableView.ViewData.IsEmpty then

begin

   Exit;

end;

方法三:〖推荐〗
直接取表格的显示值,这个应该算是比较好的。经测试,拖动、分组、过滤等操作都不会影响取值。



for i:= 0 to AView.Controller.SelectedRowCount-1 do begin

  showmessage(AView.DataController.GetDisplayText(AView.Controller.SelectedRows[i].RecordIndex,AView.DataController.GetItemByFieldName('sMergeNo').Index));

end;



判断cxGrid是否为空表

  1. if cxGridDBTableView.ViewData.IsEmpty then
  2. begin
  3. Exit;
  4. end;


联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678