DataGridView slow loading new data
I have following code now:
private void LoadNewRegistrations()
{
grdNewRegistrations.EditMode = DataGridViewEditMode.EditOnEnter;
grdNewRegistrations.EditingControlShowing +=
GrdNewRegistrations_EditingControlShowing;
const string cSql = @"SELECT
RegistrationId,RegistrationName,RegistrationStatusText
FROM Registration
LEFT JOIN RegistrationStatus
ON
Registration.RegistrationStatusID=RegistrationStatus.RegistrationStatusID
ORDER BY 1";
const string cSql2 = "SELECT VirtualCategoryName FROM
VirtualCategory ORDER BY 1";
SqlParameter[] oSqlParams = {};
var dgceb = new DataGridViewCheckBoxColumn {Name =
"cebColumn",HeaderText = @"Vybrat"};
var dgcob = new DataGridViewComboBoxColumn {Name =
"cobColumn",HeaderText = @"Virtuální kategorie"};
dgceb.HeaderCell.Style.Alignment =
DataGridViewContentAlignment.MiddleCenter;
DataView vCitems = DTO.Instance.GetDataView(cSql2);
foreach (DataRowView rowView in vCitems)
{
dgcob.Items.Add(rowView[0].ToString());
}
dgcob.Items.Add("-");
grdNewRegistrations.Columns.AddRange(
new DataGridViewColumn[]
{
dgceb,
new DataGridViewTextBoxColumn {Name = "idColumn",
HeaderText = @"ID"},
new DataGridViewTextBoxColumn {Name = "nameColumn",
HeaderText = @"Název"},
dgcob,
new DataGridViewTextBoxColumn {Name = "lastRegColumn",
HeaderText = @"Poslední registrace"},
new DataGridViewTextBoxColumn{Name = "statusColumn",
HeaderText = @"Status"}
});
DTO.Instance.ConnectionString = ConnStringWW;
DataView dvReg = DTO.Instance.GetDataView(cSql, oSqlParams);
grdNewRegistrations.Columns[0].AutoSizeMode =
DataGridViewAutoSizeColumnMode.None; //checkbox
grdNewRegistrations.Columns[0].ReadOnly = false;
grdNewRegistrations.Columns[1].AutoSizeMode =
DataGridViewAutoSizeColumnMode.AllCells; //id reg
grdNewRegistrations.Columns[1].ReadOnly = true;
grdNewRegistrations.Columns[2].AutoSizeMode =
DataGridViewAutoSizeColumnMode.Fill; //name reg
grdNewRegistrations.Columns[2].ReadOnly = true;
grdNewRegistrations.Columns[3].AutoSizeMode =
DataGridViewAutoSizeColumnMode.None; //vc combo
grdNewRegistrations.Columns[3].Width = 150;
grdNewRegistrations.Columns[3].ReadOnly = false;
grdNewRegistrations.Columns[4].AutoSizeMode =
DataGridViewAutoSizeColumnMode.None; //date
grdNewRegistrations.Columns[4].Width = 150;
grdNewRegistrations.Columns[4].ReadOnly = true;
grdNewRegistrations.Columns[5].AutoSizeMode =
DataGridViewAutoSizeColumnMode.None; //status reg
grdNewRegistrations.Columns[5].ReadOnly = true;
foreach (DataRowView dataRowView in dvReg)
{
grdNewRegistrations.Rows.Add(false, dataRowView[0],
dataRowView[1], "-", " ", dataRowView[2]);
}
}
Data (about 5000 records) loads when application starts. It takes about
5sec to load. Now, when I need to load other records (same columns, just
another WHERE clause in sql select condition) when app running it takes
MUCH longer time. I´m using same data to just figure out why its so damn
slow.
private void cbChooseTodayReg_CheckedChanged(object sender, EventArgs e)
{
grdNewRegistrations.Rows.Clear();
LoadNewRegistrations();
}
Another option that I´ve heard is to use DataSource. But I can´t figure
out how to make it in this case (0COL - all checkboxes, 1,2,5COL - from db
on first load, 3COL - combobox with data from db, 4COL just to show info
on combobox value change)
No comments:
Post a Comment