DBGrid 鼠标右键向下填充 bit字段的修正
编程DBGrid 鼠标右键向下填充时,只有bit字段与通常字段不一样。原因是,bit字段当鼠标点击时,就会出现Boolean反值。
见下图:
鼠标右键点击之前“提成”字段为False,当鼠标右键点击之前“提成”字段为True。因为,鼠标右键时,字段的值又变回True。下身填充,不能成功。
经研究,通过反值填充, 实现向下填充的功能。代码如下:
procedure SetDownTianChongEh(var DBGrid: TDBGridEh);
var S,sCopy:string;
iCol,i,k,l:integer;
T:Boolean;
begin
With DBGrid.DataSource.DataSet do
begin
iCol:=DBGrid.Col-1; // 注意Col 1..N 与 Fields 0..n-1 不一致
if DBGrid.DataSource.DataSet.Fields[iCol].DataType=ftboolean then
begin
T:=not DBGrid.DataSource.DataSet.Fields[iCol].AsBoolean; // Not修改 Checked 值
Edit;
DBGrid.DataSource.DataSet.Fields[iCol].AsBoolean:=T; // 改回值
if T then sCopy:='True'
else sCopy:='False';
end
else begin
sCopy:=DBGrid.Columns.Grid.SelectedField.Text;
end;
if not InputQuery('输入对话框', '请输入向下搷充的步数:', S) then exit;
if S='' then exit;
if not NumOK(S) then
begin
ShowMessage('输入了非法字符,请输入“小写数字”!');
exit;
end;
K:=StrToInt(S);
i:=0;
Next;
While not EOF and (I<K) do
begin
Edit;
DBGrid.Columns.Grid.SelectedField.Text:=sCopy;
Post;
Next;
i:=i+1;
end;
for l:=0 to i do prior;
end;
end;