我有一个 TabControl,里面有三个选项卡。每个选项卡都包含一个 DataGridView。当我第一次显示 TabControl 时,我将源数据数据绑定到三个 DataGridView 中的每一个,经过一段时间的延迟,TabControl 出现在屏幕上的默认(第一个)选项卡上。
当我单击其他两个选项卡中的任何一个(仅第一次)时,在显示每个选项卡之前都会有很长的延迟。一旦任何选项卡至少显示一次,我就可以非常快速地在选项卡之间自由切换。有什么方法可以预加载或预渲染这些选项卡,这样我就不会在第一次显示时遇到这种延迟?
也许我可以在后台的线程中做一些事情来预加载剩余的标签。或者也许有人为我编写了 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 顶部覆盖了一个图形以指示控件正在加载,然后我将其隐藏(不包括代码)。它作为一种解决方法很有用,但不是一个优雅的解决方案。