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;
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751925.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?