2016-07-18 14 views
0

私は前のステップの何かが完了したときにDataTableオブジェクトからデータをロードするフォーム上にDataGridViewを持っています(これはウィザードタイプのアプリケーションで、これはTabControlにあります)。前のステップから移動するときに、いくつかの追加の列を追加してDataGridViewに配置されるファイルがあります。明確にするには、テーブルにデータを入力すると、と同じように動作します。 - データ自体に問題はありません。DataGridViewを正しくレンダリングするにはどうすればいいですか?

私の問題は、前のステップから移動すると、DataGridViewが正しくレンダリングされないということです。それはデータがあるべきである前のステップを表示し、セルを選択したときにのみデータを表示する(個々のセル - そのセルをレンダリングする場所(マウスをreadonly = falseセルに置くか、readonly = trueセルをクリックする)またはテーブル全体を選択する)。スクリーンショットは以下の通りです:

画面が最初にレンダリングされる

when the screen is first rendered

私が選択したすべてのセル:私は、プログラムのすべてのセルを選択しようとした

when the cells are selected

datagridview1.SelectAll()を使用して)私はDataGridViewを実装した後には何の違いはありません。また、datagridview1.Select()メソッドを使用し、datagridview1.CurrentCell = datagridview1.Rows[0].Cells[0]を設定しようとしました。

これはコードで解決できるかどうかわかりません - セルが正しくレンダリングされるかどうか、またはこれがローカルマシンの問題であるかどうかを確認する方法はありますか?

+0

いずれも必要ではないはずです。だからあなたはその理由を知る必要があります。 DGVは 'TabPage'ですか?ページが選択されるまで表示更新をブロックする傾向があります。通常は 'datagridview1.Refresh()'を呼び出すだけで十分です.. – TaW

+0

@TaW 'TabPage'にありますが、' Refresh() 'メソッドはそれを更新していません... UIをリフレッシュできる別の方法はありますか? – Charlotte

+0

__When__リフレッシュを呼び出しますか?それはページが表示される__after__と呼ばれる必要があります! – TaW

答えて

1

コンテナが非表示になっているときにデータをロードした場合、TabPageの表示更新はブロックされます。

すると、Selectedイベントをコーディングすることができます生きるためにそれを持って来るために:本の

private void tabControl1_Selected(object sender, TabControlEventArgs e) 
{ 
    foreach (Control ctl in tabControl1.SelectedTab.Controls) ctl.Refresh(); 
} 
+0

このコードを正確に使用しましたが、私はまだ同じ問題を抱えています。私は 'Selected'イベントと' SelectedIndexChanged'イベントのすべてのコントロールを幸運なしにリフレッシュしようとしました... – Charlotte

+0

Hm、strange。 __test__のみ、ページに 'Button'を、クリックイベントに' datagridview1.Refresh(); 'を入れてください。 - 上記のコードは、DGVがTabPageに__directly__、Groupbx、Panel、Slittcontainer、または他のコンテナのような他のコントロール内にネスティングされていないことを示しています。 – TaW

+0

それはうまくいった! 'Refresh()'関数をいろいろな呼び出しに入れて試してみましょう。多分 'tabPage1.Focus()'のようなものでしょう。これまでのすべてのあなたの助けをありがとう! – Charlotte

関連する問題