gpt4 book ai didi

delphi - 哪些属性决定 ClientDataSet 字段大小?

转载 作者:行者123 更新时间:2023-12-03 15:52:51 25 4
gpt4 key购买 nike

我有一个使用 ClientDataSets 和本地文件存储的应用程序。一些信息显示在数据库网格中,我发现它被切断了——显示了字符串的前 500 个字符左右,但底层字段需要更长。所以我回到我的代码并增加了底层 FieldDef 的大小及其显示宽度。我还创建了一个新的数据集(在设计时)。最后,我运行该应用程序并创建了一个新数据库。然而,只显示了大约 500 个字符。

我应该在哪里查看限制我的字段长度的因素?

最佳答案

我怀疑您遇到了 TDBGrid 的内部限制列宽,因为显示 500 个字符的列将比典型的屏幕宽。 (如果您想深入了解 VCL 源代码,可以选中此项;从 Grids.pas 开始。)

通常,TDBGrid不会在单个列中显示大量文本。它会导致用户大量滚动,而水平滚动来阅读宽文本对大多数人来说是非常烦人的。

通常的方法是使用 ftMemo类型字段,它可以包含几乎无限的文本内容。当列分配给TDBGrid时,网格列显示(MEMO) ,并且应用程序处理对该列的单击或双击以显示带有 TEdit 的辅助表单。或TRichEdit显示/编辑该列的完整内容。

这是 TDBGrid 的示例附于TClientDataSet命名CDS使用 CDS.FieldDefs 定义以下列(无用,但只是一个示例)在对象检查器中:

Column      Persistent Name    FieldType    Size
------ --------------- --------- ----
ID CDSID ftInteger 0
Name CDSName ftString 25
Notes CDSNotes ftMemo 0

由于基础数据集不存在,我分配了 FileName ,并使用以下代码在运行时创建它:

procedure TForm1.FormCreate(Sender: TObject);
begin
if not FileExists(CDS.FileName) then
begin
CDS.CreateDataSet;
CDS.Active := True;
CDS.InsertRecord([1, 'John Smith', 'This is some longer text'#13'for testing.']);
CDS.InsertRecord([2, 'Fred Jones', 'A note about Fred goes'#13'here for now.']);
CDS.Active := False;
end;
CDS.Active := True;
end;

我放了一个TDataSource在表单上,​​并将其设置为 DataSourceCDS 。我添加了TDBGrid ,并将其设置为 DataSetDataSource1 .

在对象检查器中,选择 TDBGrid ,转到“事件”选项卡,并将以下内容添加到 OnCellClick事件(当然只是为了显示):

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column.FieldName := 'CDSNotes' then
ShowMessage(Column.Field.AsString); // Display other form here instead
end;

这是点击CDSNotes后的显示TDBGrid 第 1 行的列:

enter image description here

如果您必须显示 TDBGrid 中较长文本列的部分内容,您可以使用类似以下内容:

procedure TForm2.CDSNotesGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
// Again, a trivial example using an arbitrary chunk of the first 20
// characters just for demo purposes.
if DisplayText then
Text := Copy(Sender.AsString, 1, 20)
else
// Not for display only; return all the text.
Text := Sender.AsString;
end;

对上面的示例应用程序执行此操作会将显示更改为:

enter image description here

关于delphi - 哪些属性决定 ClientDataSet 字段大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10541853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com