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-05-12datagridview コンボボックス列にバインドするときにsqlデータソースをフィルタリングしようとしています...そしてフォームを高速化するのに役立ちます。私の問題は、コンボボックスに含まれていない新しいレコードをdatagridviewに追加するときです。たとえば、このスクリプトをdatagridviewにバインドします。「selectID、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 に答える