2011-11-09 3 views
4

データセットにバインドされたデータグリッドにデータを表示します。データセットには、サーバー上のProgressデータベースからデータが供給されます。処理中に、データセットを変更してサーバーからその値をリフレッシュする必要があります。これまでのところ、すべての良いと良いと問題はありません。C#データグリッドをリフレッシュするときにラインジャンプを中止する

問題は、新しいデータが返ってきたときに、データグリッド内の選択が以前と同じ行に残るようにすることです。

int iPostingPos = dgridPostings.CurrentRow.Index; 

// process data on server 
dataContTranMatch.RunBoProcedure(dataContTranMatch.BoProcedure, 
transactionMatchingDataSet); 
// Reload Data 
LoadData(); 

if (iPostingPos > ttPOSTingsRowBindingSource.Count) 
{ 
    iPostingPos = ttPOSTingsRowBindingSource.Count; 
} 
if (ttPOSTingsRowBindingSource.Count > 0) 
{ 
    ttPOSTingsRowBindingSource.Position = iPostingPos; 
    dgridPostings.Rows[iPostingPos].Selected = true; 
} 

これは動作しますが、我々は、ユーザ本当に迷惑です画面、上およそジャンプ選択した行を取得します:私たちは、次のコードでこれを管理してきました。

たとえば、行7を選択してこのコードを実行すると、行7が選択され、選択が行0にジャンプしてから行7にジャンプします。これは受け入れられません。この問題を解決しようとする試みで

は、我々は次の追加の行に上記のコードを囲む試してみた:

chTableLayoutPanel1.SuspendLayout(); 

*DO CODE* 

chTableLayoutPanel1.ResumeLayout(); 

しかし、これは助けにはなりませんでした。

これまでのところ、私たちが到達できる最も受け入れられた解決策は、選択肢の色を変更して見えないようにし、跳躍してから色を元に戻すことです。これにより、フリッカーはより受け入れやすくなります。

dgridPostings.RowsDefaultCellStyle.SelectionBackColor = 
SystemColors.Window; 
dgridPostings.RowsDefaultCellStyle.SelectionForeColor = 
SystemColors.ControlText; 

DO CODE 

dgridPostings.RowsDefaultCellStyle.SelectionBackColor = 
SystemColors.Highlight; 
dgridPostings.RowsDefaultCellStyle.SelectionForeColor = 
SystemColors.HighlightText; 

は、我々は問題が、我々はそれが再びそれにデータを持っているものを再移動バインディングソースデータセットが更新されると、一時的に空であることによって引き起こされることを信じて。

この不快なちらつきがどのように発生するのを防ぐことができますか?

感謝

コリン・

+1

選択色を変更する代わりに、選択したインデックスを一時的に-1(選択なし)に設定できますか? – mellamokb

+0

何でもできます;〜)。しかし、何も選択されていないので、行を再配置しようとすると問題は生じませんか? – Colin

答えて

2

それは利き少し重いかもしれないが、一つの選択肢は、コントロールの描画を一時停止することです。ユーザーはここでこれを達成する方法を尋ねました:How Do I Suspend Painting For a Control and Its' Children。私はそこで選択された答えを使って同様のことを達成しました。

+0

実際、私はそれがSuspendLayoutを使って何をしようとしているのかもしれないと思います。私たちはそれをちょっと調べます。ありがとうございました。 – Colin

+0

スポットがあります。 interopをusingリストに追加する必要がありましたが、それ以外の場合は、そのソリューションを「そのままの状態でそのまま」利用することができました。とても感謝しています! – Colin

+0

歓迎します。あなたがこれをいくつかの場所で行うと思うなら、私は、Suspend/Resume拡張メソッドをControlクラスにすることをお勧めします。私は@ザハジョンソンがコメントでそれを提案したと信じています – robowahoo

関連する問題