方法一:
使用函数GetRowValue
此方法在表格过滤、排序后也正常,
请注意:此代码顺序需要CXGRID的列顺序和ADOQUERY中SELECT的字段顺序一致,否则会取错。
procedure TfrmBillExtraction.pmGetBill_D_DatasClick(Sender: TObject); varI,J : Integer; beginwith cxGDBTV_Bill_M.DataController,cxGDBTV_Bill_M.DataController.DataSet dobeginfor I := 0 to GetSelectedCount-1 dobeginJ := GetSelectedRowIndex(I);//取选中行,列名为sMergeNO的值ShowMessage(Trim(GetRowValue(GetRowInfo(J),FieldByName('sMergeNo').Index)));end;end; end;
方法二:
使用函数:GetValue
此方法开了过滤、排序后不正常,请大家注意。
1 procedure TfrmBillExtraction.pmGetBill_D_DatasClick(Sender: TObject); 2 var 3 I,J : Integer; 4 begin 5 with cxGDBTV_Bill_M.DataController,cxGDBTV_Bill_M.DataController.DataSet do 6 begin 7 for I := 0 to GetSelectedCount-1 do 8 begin 9 J := GetSelectedRowIndex(I); 10 //取选中行,列名为sMergeNO的值 11 ShowMessage(Trim(GetValue(J,FieldByName('sMergeNo').Index))); 12 end; 13 end; 14 end;
方法三:〖推荐〗
直接取表格的显示值,这个应该算是比较好的。经测试,拖动、分组、过滤等操作都不会影响取值。
1 for i:= 0 to AView.Controller.SelectedRowCount-1 do begin 2 showmessage(AView.DataController.GetDisplayText(AView.Controller.SelectedRows[i].RecordIndex,AView.DataController.GetItemByFieldName('sMergeNo').Index)); 3 end;
判断cxGrid是否为空表
1 if cxGridDBTableView.ViewData.IsEmpty then 2 begin 3 Exit; 4 end;