c# 中 delphi 的 TClientDataSet.PacketRecords 的等价物是啥?

Posted

技术标签:

【中文标题】c# 中 delphi 的 TClientDataSet.PacketRecords 的等价物是啥?【英文标题】:what is the equivalent of delphi's TClientDataSet.PacketRecords in c#?c# 中 delphi 的 TClientDataSet.PacketRecords 的等价物是什么? 【发布时间】:2016-04-19 10:50:00 【问题描述】:

如果我使用 Adapter.Fill() 方法将数据读入数据表,则整个结果集将加载到数据表中。 当有许多记录时,这可能需要一到两秒钟,并且由于它是在加载表单中,因此表单需要几秒钟才能显示出来。

在 delphi 中,我可以使用 TClientDataSet 并将 packetrecords 设置为 50,例如,使其在打开时不加载整个表,仅在需要时获取更多记录。

有没有办法在 C# 中使用简单的数据表组件来做同样的事情? 应用程序将所有数据感知控件绑定到一个绑定源,该绑定源绑定到一个由 Adapter.Fill() 方法填充的数据表。

【问题讨论】:

我以前在我的应用程序中使用适配器,但现在我使用 Linq 和 EF,我建议你尝试一下。但是在您的情况下,您必须进行分页。对于进行分页,您有一些选择,例如 DataView ,Collection 等 您将使用 DataReader 并一次填充 DataTable 一次记录。您仍然需要等待从数据库中检索第一条记录。您也可能在等待数据库获取下一个值的每条记录之间存在延迟。 DataReader 正在使用 IEnumerator 方法。 我不是 EF 的粉丝,但我会看看 Linq。是否有任何我可以阅读的有用文档也解释了如何进行分页? 我已将 winforms 标签添加到我的问题中,以明确我在 winforms 项目中需要此标签 【参考方案1】:

方法填充有重载:

public int Fill(int startRecord, int maxRecords, params DataTable[] dataTables);

【讨论】:

它是否就像 delphi TClientDataSet 在需要时获取更多记录一样?例如,当用户在 datagrid 中向下滚动时?

以上是关于c# 中 delphi 的 TClientDataSet.PacketRecords 的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 代码调用 delphi DLL 函数

c# 中 delphi 的 TClientDataSet.PacketRecords 的等价物是啥?

Delphi编写DLL供C#调用的实例

C#调用delphi记录结构体问题

Delphi写的DLL回调C#

Delphi - 相当于 C# 的三元运算符? [复制]