我有一个数据库字段值,它是一个像 0 和 1 这样的整数。在将数据加载到数据库网格时是否可以将此整数值转换为布尔值。我期待没有条件检查,比如直接类型转换。
谢谢
我有一个数据库字段值,它是一个像 0 和 1 这样的整数。在将数据加载到数据库网格时是否可以将此整数值转换为布尔值。我期待没有条件检查,比如直接类型转换。
谢谢
我猜您想在 DBGrid 中将数据库字段显示为 CheckBox。如果是这样,请阅读Zarko Gajic 的文章。它是关于布尔字段的,但您可以根据需要轻松修改代码。
没有办法将整数转换为布尔值。你可以实现这样的功能
function IntToBool(const AnInt: Integer): Boolean;
begin
if AnInt = 0 then Result := False
else Result := True;
end;
解决您的问题的最简单方法可能是使用布尔计算字段。
如果您需要从 DBGrid 编辑它,它会变得有点棘手(但仍然可能)。
如果你想在 DBGrid 中显示“True”和“False”这两个词,你应该像这样使用Field的 OnGetText 事件:
procedure TMyForm.MyDataSetFieldGetText(Sender: TField;
var Text: string; DisplayText: Boolean);
begin
case Sender.AsInteger of
0 : Text := 'False';
1 : Text := 'True';
else
Text := '-';
end;
end;
在此处尝试此示例功能:
function IntToBooleanStr(AInteger: Integer): string;
begin
case AInteger of
0:begin
Result := 'False';
end;
1:begin
Result := 'True';
end
else
Result := 'False';
end;
end;
仅此而已,您可以在组合框 onChange 事件中使用它来过滤一些内部具有布尔值的逻辑数据。
像这儿:
procedure TFrm_Books.ComBox_AvailableFilterChange(Sender: TObject);
begin
Table_Book.Filtered := False;
Table_Book.FilterOptions := [foCaseInsensitive];
Table_Book.Filter := '';
Table_Book.Filter := 'Available = ' + IntToBooleanStr(ComBox_AvailableFilter.ItemIndex);
Table_Book.Filtered := True;
end;
这是此组合框的 DFM 代码:
object ComBox_AvailableFilter: TComboBox
Left = 336
Top = 120
Width = 193
Height = 21
ItemHeight = 13
Items.Strings = (
'Not Available'
'Available')
TabOrder = 0
end
我希望这个功能可以解决你上面的问题。