我有一个使用ClientDataSets和本地文件存储的应用程序。一些信息显示在数据库网格中,我发现它被切断了 - 显示了前500个字符左右的字符串,但基础字段需要更长。所以我回到了我的代码并增加了底层FieldDef的大小以及它们的显示宽度。我还创建了一个新的数据集(在设计时)。最后,我运行了应用程序,并创建了一个新的数据库。然而,只显示了约500个字符。
我应该在哪里查看限制我的场长的是什么?
答案 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;
列后的显示:
如果必须显示CDSNotes
中较长文本列的部分内容,您可以使用以下内容:
TDBGrid
使用上面的示例应用程序将显示更改为: