I've two tabs with Tab1 doing plain validation and Tab2, having a datagridview with its source being a datatable filled with data from a csv. When I navigate from Tab1 to Tab2, the transition is not smooth. When I switch from Tab2 to Tab1 and then back to Tab2, the grid is reloading the data and the form is freezing for a while. Is there a way we can enable caching of the datagrid content for it not to reload every time?
private void Tab_Selected(Object sender, TabControlEventArgs e)
{
if (e.TabPage == Tab1)
{
WindowState = FormWindowState.Maximized;
Grid.Size = new System.Drawing.Size(1920, 1080);
Tab.Size = new Size(1920, 1080);
Grid.Dock = DockStyle.Fill;
try
{
foreach (string f in Directory.GetFiles(dir, "HSPP*"))
{
LoadData(f);
}
}
catch (Exception ex)
{
MessageBox.Show("Exception raised:" + ex.Message);
}
}
else
{
Tab.BindingContext = this.BindingContext;
this.WindowState = FormWindowState.Normal;
}
}
public void LoadData(String FileName)
{
string header_text = "<a bunch of headers>";
string[] headers;
string[] fields;
ArrayList schoolids = new ArrayList();
DataTable dt = new DataTable();
BindingSource source = new BindingSource();
TextFieldParser tp = new TextFieldParser(FileName);
DataRow dr;
Grid.AllowUserToAddRows = false;
headers = header_text.Split(new char[] { ',' });
tp.TextFieldType = FieldType.FixedWidth;
tp.SetFieldWidths(new int[33] { 10, 8, 8, 35, 35, 35, 35, 20, 15, 40, 40, 30, 30, 40, 25, 3, 12, 15, 10, 10, 8, 25, 15, 40, 60, 80, 3, 5, 5, 5, 41, 1, 30 });
try
{
for (int i = 0; i < headers.Length; i++)
dt.Columns.Add(headers[i]);
while (!tp.EndOfData)
{
dr = dt.NewRow();
fields = tp.ReadFields();
for (int i = 0; i < fields.Count(); i++)
dr[i] = fields[i].ToUpper();
dt.Rows.Add(dr);
}
source.DataSource = dt;
Grid.DataSource = source;
foreach (DataGridViewRow row in Grid.Rows)
{
if (!schoolids.Contains(row.Cells[8].Value))
schoolids.Add(row.Cells[8].Value);
}
ValidateData(schoolids);
}
catch (Exception e) { MessageBox.Show(e.ToString()); }
}