3 つのタブを含む TabControl があります。各タブには DataGridView が含まれています。TabControl を初めて表示するとき、ソース データを 3 つの DataGridView のそれぞれにデータ バインドし、少し遅れて、TabControl がデフォルト (1 番目) のタブの画面に表示されます。
他の 2 つのタブのいずれかをクリックすると (初回のみ)、各タブが表示されるまでに非常に長い遅延があります。いずれかのタブが少なくとも 1 回表示されると、タブをすばやく自由に切り替えることができます。これらのタブをプリロードまたはプリレンダリングして、最初の表示でこの遅延が発生しないようにする方法はありますか?
おそらく、バックグラウンドのスレッドで何かを実行して、残りのタブをプリロードすることができます。あるいは、誰かが私のためにこれを行う TabControl の拡張機能を書いたのかもしれません。
どんな助けでも大歓迎です。
編集: krawl の要求に応じて、データを DataGridViews にバインドするために使用しているコードを次に示します。
public void LoadNewDataBase(string filename)
{
// Create the database connection
mySQL.CreateNewDataBase(filename);
// Display the DF DataSet
dataGridViewDF.DataSource = GetDataSet("DF").Tables[0].DefaultView;
dataGridViewSA.DataSource = GetDataSet("SA").Tables[0].DefaultView;
dataGridViewGPS.DataSource = GetDataSet("GPS").Tables[0].DefaultView;
dataGridViewDF.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridViewSA.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridViewGPS.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
// Preload the tabs
for (int i = tabControl1.TabCount - 1; i >= 0; i--)
{
tabControl1.SelectedIndex = i;
tabControl1.Invalidate();
tabControl1.Update();
}
}
private DataSet GetDataSet(string tableName)
{
DataSet ds = new DataSet();
mySQL.GetDataSet("SELECT * FROM " + tableName).Fill(ds);
return ds;
}
この操作はスレッド化されていません。私の問題の一時的な解決策として、各タブを反復処理して表示するための for ループを LoadNewDataBase メソッドに含めました。この操作をユーザーからわかりにくくするために、TabControl の上にグラフィックを重ねて、コントロールが読み込まれていることを示し、後でそれを非表示にします (そのためのコードは含まれていません)。回避策としては便利ですが、エレガントなソリューションではありません。