Delphi 手工创建TClientDataset 及动态添加数据后最后一条记录不显示的解决方法

procedure TForm1.Button6Click(Sender: TObject);
var
dsTemp:TClientDataSet;
begin
dsTemp:=TClientDataSet.Create(nil);
{ 添加字段 }
with dsTemp.FieldDefs.AddFieldDef do
begin
Name := 'ID';
DataType := ftInteger;
end;
with dsTemp.FieldDefs.AddFieldDef do
begin
Name := 'Name';
DataType := ftString;
Size := 12; { ftString 类型的 Size 默认 20 }
end;
with dsTemp.FieldDefs.AddFieldDef do
begin
Name := 'Age';
DataType := ftWord;
end;
with dsTemp.FieldDefs.AddFieldDef do
begin
Name := 'Sex';
DataType := ftBoolean;
end;
{ 构建数据集, 不可缺少的一步 }
dsTemp.CreateDataSet;
{ 显示; 如果在设计时已挂接或不需要显示, 可省略下两行 }
ds.DataSet := dstemp;
{ 添加数据 }
dsTemp.AppendRecord([1, '张三', 33, True]);
dsTemp.AppendRecord([2, '李四', 44, False]);
dsTemp.AppendRecord([3, '王五', 55, True]);
dsTemp.AppendRecord([4, '刘七', 505, True]);
//QryCom.DataSource:=ds;
MainView.ClearItems;
MainView.DataController.CreateAllItems();
QryComAfterOpen(ds.DataSet);
//DBGrid1.DataSource := DataSource1;
{ 保存为 cds 或 XML }
dsTemp.SaveToFile('C:\Temp\TestBinary.cds');
dsTemp.SaveToFile('C:\Temp\TestXMLUTF8.xml', dfXMLUTF8);
end;

手工CreateDataSet之后,如果添加数据是循环动态添加的,在最后操作完成后一定要加上Dataset.Post; 否则会出现最后一条记录消失的情况。

Dataset.DisableControls;
for j := 0 to ja.Length - 1 do
begin
Dataset.Append;
jf := ja.o[j];
for k := 0 to Dataset.FieldCount - 1 do
begin
sValue := jf.AsObject.GetValues.AsArray[k].AsString; //取DATA节点下的字段值
Dataset.FieldByName(ColList[k]).AsString := sValue;
// Dataset.AppendRecord(sValue); //用这个方法要先拼接字符串
end;
// Dataset.AppendRecord([1, '张三', 33, True]);
end;
Dataset.Post; //不加这句,最后一条记录看不到
Dataset.EnableControls;

 

posted @   IT情深  阅读(160)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示