データセットにバインドされたデータグリッドにデータを表示します。データセットには、サーバー上の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(選択なし)に設定できますか? – mellamokb
何でもできます;〜)。しかし、何も選択されていないので、行を再配置しようとすると問題は生じませんか? – Colin