【问题标题】:Does a datagridview combobox column affect the speed when commiting it to the database?提交到数据库时,datagridview 组合框列是否会影响速度?
【发布时间】:2012-11-22 20:27:24
【问题描述】:

我有一个名为 frmTransaction 的表单,它有 txtTranNo、txtCustCode、dtbDate、txtRemarks、txtTotalAmount,还有一个名为 dtgDetail 的数据网格视图。

在 dtgDetail 中,我有 cTranNo、nLineID、cProductID、nQty、nPrice 和 nAmount 列。

cProductID 是一个组合框列,它有一个数据成员 cProduct 和一个显示成员 cDescription,因此当它运行时,用户将看到产品名称而不是产品代码。

但是我的产品有 2000 条记录,当我加载表单时速度很慢。将其保存/提交到我的数据库时也很慢。

我认为 cProduct 列与我的表单速度有关。这是真的?如何加快速度?

编辑

我可以展示代码,但如果我只是解释我的代码是如何工作的,它就不会那么混乱了。在我的设计时,我的 datagridview 有空列。 datagridview 的名称也是将要绑定的表的名称,当我运行它时,它会创建它的列,该列会根据表的模式自动绑定。我还有一个标志,告诉程序该字段是组合框列还是纯文本框。如果它是一个组合框列,它将生成一个 sql 脚本,并运行并将结果保存到一个数据表中,该数据表将作为组合框的数据源。组合框列的数据成员和显示成员也是由标志决定的。

建议我不要在我的脚本中为我的组合框列的数据源设置任何条件。

编辑 - 12-05-12 我尝试在将我的 sql 数据源绑定到 datagridview 组合框列时对其进行过滤……我会说我有助于加快我的表单速度。我现在的问题是当我在我的 datagridview 中添加不包含在组合框中的新记录时。例如,我将把这个脚本绑定到我的datagridview,“select ID,Desc from product where ID in (1,2,3,4,5)”。当我在 ID = 6 的 datagridview 中插入新记录/项目/产品时,它不会显示描述 数据网格视图...

【问题讨论】:

  • 您应该提供显示您如何绑定数据的代码。您可能过于频繁地调用绑定 DataGridView。
  • 我对 datagridview 做了一些广泛的工作,我发现有时优化 sql 表会有所帮助:你的表是什么样的?
  • 您是否隔离了问题是在 UI 中还是在数据库中?捕获 SQL 查询并直接在数据库中运行 - 快还是慢?按 F12 打开开发者工具(在大多数浏览器中)。转到分析选项卡,开始分析,然后让事情发挥作用。停止分析。时间都花在哪里了?在渲染代码还是等待数据库?
  • 组合框是否已预先填充,或者您是否正在为每条记录填充它?如果你每次都填充它会导致速度的极大提高

标签: sql-server vb.net datagridview datagridviewcombobox


【解决方案1】:

“非常慢”有多慢。我们说的是几秒钟还是几分钟?

如果还没有,请尝试将属性 AutoSizeColumnsMode 设置为 None。自从我弄乱 datagridview 以来已经有很长时间了,但是这个属性在过去给我带来了性能噩梦。

如果这不是问题,那么我将开始添加时间语句,这些语句分散在您的网格加载和保存/提交时执行的代码中。这将帮助您找出导致缓慢的原因。这几乎不是你所期望的。就这么简单:

var start = DateTime.Now;
//do work
var end = DateTime.Now;

Console.WriteLine("Timer spot 1: " + end.Subtract(start));

从大处着手。将计时器包裹在整个方法中。继续在你的代码中移动它,直到你(希望)找到让你慢下来的地方。然后尝试缩小范围。不要忘记检查您可能触发的任何事件是否缓慢。

希望有帮助!

【讨论】:

    【解决方案2】:

    我认为您应该尝试使用List<T> Class 来解决您的问题。这只是我的建议:)

    【讨论】:

      【解决方案3】:

      你说你的表单的速度......让我相信你正在 UI 线程上完成所有这些工作。我建议您创建一个单独的线程进行更新,并禁用表单上的任何控件,直到更新完成,这样您的表单才能保持响应。

      【讨论】:

        猜你喜欢
        • 2019-12-21
        • 1970-01-01
        • 2021-08-24
        • 2022-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 1970-01-01
        相关资源
        最近更新 更多