1

我有一个名为 frmTransaction 的表单,它有 txtTranNo、txtCustCode、dtbDate、txtRemarks、txtTotalAmount,还有一个名为 dtgDetail 的 datagridview。

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

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

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

我认为 cProduct 列与我的表单速度有关。这是真的?我怎样才能加快速度?

编辑

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

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

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

4

3 回答 3

2

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

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

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

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

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

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

希望有帮助!

于 2012-12-12T13:47:27.443 回答
1

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

于 2012-12-11T08:17:29.610 回答
1

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

于 2012-12-09T09:26:35.340 回答