什么属性确定ClientDataSet字段大小?

时间:2012-05-10 20:43:36

标签: delphi tclientdataset

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

我应该在哪里查看限制我的场长的是什么?

1 个答案:

答案 0 :(得分:4)

我怀疑您遇到TDBGrid列宽的内部限制,因为显示500个字符的列将超过典型的屏幕宽度。 (如果你想浏览VCL来源,你可以检查一下;从Grids.pas开始。)

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

通常的做法是使用ftMemo类型字段,该字段可以包含几乎无限制的文本内容。将列分配给TDBGrid后,网格列会显示(MEMO),应用程序会处理单击或双击列以显示带有TEdit或{的辅助表单{1}}显示/编辑列的完整内容。

以下是TRichEdit附加到名为TDBGrid的{​​{1}}的示例,其中在Object Inspector中使用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。我添加了DataSource,并将CDS设置为TDBGrid

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

TDBGrid

点击OnCellClick第1行procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if Column.FieldName := 'CDSNotes' then ShowMessage(Column.Field.AsString); // Display other form here instead end; 列后的显示:

enter image description here

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

TDBGrid

使用上面的示例应用程序将显示更改为:

enter image description here