473,416 Members | 1,565 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,416 software developers and data experts.

DataGridView.RowCount setting is slow

I have DataGridView in virtual mode containing 3500 rows.
In code below, assigning to RowCount value to 3500 takes 8 seconds.
CPU usage goes high at this time.
Stepping by F11 into user code shows few celltemplate property getters and
combobox/datecombo constructor calls without database access which does not
take a lot of time.

Debug output (below) shows lot of messages Stepping over non-user code.
Running in release mode from Windows this line speed is same (slow).

How to speed up grid creation ?

Using C# Express 2008 3.5 SP1 in Vista.

Andrus.

class Grid : System.Windows.Forms.DataGridView {

internal void SetDataRetriever(DataRetriever<TEntitydataRetrieve r)
{ ......
SuspendLayout();
Enabled = false;
int cnt = DataRetriever.RowCount + (ReadOnly ? 0 : 1);
// next line takes 8 seconds:
RowCount = cnt;
Enabled = true;
ResumeLayout();
}

protected override void
OnCellValueNeeded(DataGridViewCellValueEventArgs e)
{
if (!Enabled)
return;
...
}

protected override void OnRowEnter(DataGridViewCellEventArgs e)
{
if (!Enabled)
return;
...
}
}

Debug output window contains:

Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.RowCount.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.RowTemplateClon e.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.Ad d'
Step into: Stepping over non-user code
'System.Windows.Forms.Control.Enabled.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.OnRowEnter'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetCurrentCellA ddressCore'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetAndSelectCur rentCellAddress'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.Clone'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.th is[int].get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetSelectedCell Core'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetSelectedElem entCore'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.ClearSelection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetAndSelectCur rentCellAddress'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.OnRowCollection Changed_PostNotification'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.In sertCopiesPrivate'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.Ad d'

Oct 26 '08 #1
3 5692
If Rowcount is set to 1, grid opens a much faster.
Any idea why rowcount setting affects to grid creation speed ?

Andrus.

"Andrus" <ko********@hot.eewrote in message
news:%2******************@TK2MSFTNGP06.phx.gbl...
>I have DataGridView in virtual mode containing 3500 rows.
In code below, assigning to RowCount value to 3500 takes 8 seconds.
CPU usage goes high at this time.
Stepping by F11 into user code shows few celltemplate property getters and
combobox/datecombo constructor calls without database access which does
not take a lot of time.

Debug output (below) shows lot of messages Stepping over non-user code.
Running in release mode from Windows this line speed is same (slow).

How to speed up grid creation ?

Using C# Express 2008 3.5 SP1 in Vista.

Andrus.

class Grid : System.Windows.Forms.DataGridView {

internal void SetDataRetriever(DataRetriever<TEntity>
dataRetriever)
{ ......
SuspendLayout();
Enabled = false;
int cnt = DataRetriever.RowCount + (ReadOnly ? 0 : 1);
// next line takes 8 seconds:
RowCount = cnt;
Enabled = true;
ResumeLayout();
}

protected override void
OnCellValueNeeded(DataGridViewCellValueEventArgs e)
{
if (!Enabled)
return;
...
}

protected override void OnRowEnter(DataGridViewCellEventArgs e)
{
if (!Enabled)
return;
...
}
}

Debug output window contains:

Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.RowCount.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewColumn.CellTempl ate.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.CompleteCellsCo llection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.RowTemplateClon e.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.Ad d'
Step into: Stepping over non-user code
'System.Windows.Forms.Control.Enabled.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.OnRowEnter'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetCurrentCellA ddressCore'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetAndSelectCur rentCellAddress'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Data GridViewTextBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.PropertyStore.GetObject'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewCell.Style.get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewTextBoxCell.Clon e'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dat aGridViewComboBoxCell'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Fla tStyle.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Dis playStyleForCurrentCellOnly.set'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewComboBoxCell.Clo ne'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.CloneCells'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRow.Clone'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.th is[int].get'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetSelectedCell Core'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetSelectedElem entCore'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.ClearSelection'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.SetAndSelectCur rentCellAddress'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridView.OnRowCollection Changed_PostNotification'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.In sertCopiesPrivate'
Step into: Stepping over non-user code
'System.Windows.Forms.DataGridViewRowCollection.Ad d'
Oct 27 '08 #2
If Rowcount is set to 1, grid opens a much faster.
Any idea why rowcount setting affects to grid creation speed ?
I created testcase for it.
Line
m_Grid.RowCount = 1000000;

takes 8 seconds.
How to speed it up ?

Andrus.
using System;
using System.Windows.Forms;
using System.Collections.Generic;

class test
{
[STAThreadAttribute()]
public static void Main()
{
Application.Run(new VirtualModeForm());
}
}

class VirtualModeForm : Form
{
private List<DataObjectm_Data = new List<DataObject>();
private List<boolm_Visited = new List<bool>();
DataGridView m_Grid = new DataGridView();
public VirtualModeForm()
{
Controls.Add(m_Grid);
m_Grid.CellValueNeeded += OnCellValueNeeded;
InitData();
InitGrid();
}

private void InitData()
{
for (int i = 0; i < 1000001 + 1; i++)
{
m_Visited.Add(false);
DataObject obj = new DataObject();
obj.Id = i;
obj.Val = 2 * i;
m_Data.Add(obj);
}
}

private void InitGrid()
{
m_Grid.Dock = DockStyle.Fill;
m_Grid.AutoResizeColumns(DataGridViewAutoSizeColum nsMode.DisplayedCellsExceptHeader);
m_Grid.VirtualMode = true;
m_Grid.ReadOnly = true;
m_Grid.ColumnCount = 108;
// this line causes 8 seconds delay. how to fix.
m_Grid.RowCount = 1000000;
}

private void OnCellValueNeeded(object sender,
DataGridViewCellValueEventArgs e)
{

m_Visited[e.RowIndex] = true;
if (e.ColumnIndex == 0)
{
e.Value = m_Data[e.RowIndex].Id;
}
else if (e.ColumnIndex == 1)
{
e.Value = m_Data[e.RowIndex].Val;
}
else if (e.ColumnIndex == 2)
{

Random rand = new Random();
e.Value = rand.Next();
}
}
}

public class DataObject
{
private int m_Id;
private int m_Val;

public int Val
{
get { return m_Val; }
set { m_Val = value; }
}

public int Id
{
get { return m_Id; }
set { m_Id = value; }
}

public int Id1 { get; set; }
public int Id2 { get; set; }
public int Id3 { get; set; }
public int Id4 { get; set; }
public int Id5 { get; set; }
public int Id6 { get; set; }
public int Id7 { get; set; }
public int Id8 { get; set; }
public int Id9 { get; set; }
public int Id10 { get; set; }
public int Id11 { get; set; }
public int Id12 { get; set; }
public int Id13 { get; set; }
public int Id14 { get; set; }
public int Id15 { get; set; }
public int Id16 { get; set; }
public int Id17 { get; set; }
public int Id18 { get; set; }
public int Id19 { get; set; }
public int Id20 { get; set; }
public int Id21 { get; set; }
public int Id22 { get; set; }
public int Id23 { get; set; }
public int Id24 { get; set; }
public int Id25 { get; set; }
public int Id26 { get; set; }
public int Id27 { get; set; }
public int Id28 { get; set; }
public int Id29 { get; set; }
public int Id31 { get; set; }
public int Id32 { get; set; }
public int Id33 { get; set; }
public int Id34 { get; set; }
public int Id35 { get; set; }
public int Id36 { get; set; }
public int Id37 { get; set; }
public int Id38 { get; set; }
public int Id39 { get; set; }
public int Id310 { get; set; }
public int Id311 { get; set; }
public int Id312 { get; set; }
public int Id313 { get; set; }
public int Id314 { get; set; }
public int Id315 { get; set; }
public int Id316 { get; set; }
public int Id317 { get; set; }
public int Id318 { get; set; }
public int Id319 { get; set; }
public int Id320 { get; set; }
public int Id321 { get; set; }
public int Id322 { get; set; }
public int Id323 { get; set; }
public int Id324 { get; set; }
public int Id325 { get; set; }
public int Id326 { get; set; }
public int Id327 { get; set; }
public int Id328 { get; set; }
public int Id329 { get; set; }
public int Id401 { get; set; }
public int Id402 { get; set; }
public int Id403 { get; set; }
public int Id404 { get; set; }
public int Id405 { get; set; }
public int Id406 { get; set; }
public int Id407 { get; set; }
public int Id408 { get; set; }
public int Id409 { get; set; }
public int Id4010 { get; set; }
public int Id4011 { get; set; }
public int Id4012 { get; set; }
public int Id4013 { get; set; }
public int Id4014 { get; set; }
public int Id4015 { get; set; }
public int Id4016 { get; set; }
public int Id4017 { get; set; }
public int Id4018 { get; set; }
public int Id4019 { get; set; }
public int Id4020 { get; set; }
public int Id4021 { get; set; }
public int Id4022 { get; set; }
public int Id4023 { get; set; }
public int Id4024 { get; set; }
public int Id4025 { get; set; }
public int Id4026 { get; set; }
public int Id4027 { get; set; }
public int Id4028 { get; set; }
public int Id4029 { get; set; }
public int Id4031 { get; set; }
public int Id4032 { get; set; }
public int Id4033 { get; set; }
public int Id4034 { get; set; }
public int Id4035 { get; set; }
public int Id4036 { get; set; }
public int Id4037 { get; set; }
public int Id4038 { get; set; }
public int Id4039 { get; set; }
public int Id40310 { get; set; }
public int Id40311 { get; set; }
public int Id40312 { get; set; }
public int Id40313 { get; set; }
public int Id40314 { get; set; }
public int Id40315 { get; set; }
public int Id40316 { get; set; }
public int Id40317 { get; set; }
public int Id40318 { get; set; }
public int Id40319 { get; set; }
public int Id40320 { get; set; }
public int Id40321 { get; set; }
public int Id40322 { get; set; }
public int Id40323 { get; set; }
public int Id40324 { get; set; }
public int Id40325 { get; set; }
public int Id40326 { get; set; }
public int Id40327 { get; set; }
public int Id40328 { get; set; }
public int Id40329 { get; set; }
}

Oct 27 '08 #3
Here is simpler testcase to reproduce 8 sec delay:

using System;
using System.Windows.Forms;

class Test
{
public static void Main()
{
Application.Run(new VirtualModeForm());
}
}

class VirtualModeForm : Form
{
DataGridView grid = new DataGridView();
public VirtualModeForm()
{
Controls.Add(grid);
grid.VirtualMode = true;
grid.ColumnCount = 108;
// this line causes 8 seconds delay. how to fix.
grid.RowCount = 1000000;
}
}

Andrus.
Oct 28 '08 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: wackyphill | last post by:
Anyone seen this? Know if its a bug? I'm pretty sure it is. I have a DataGridView control in a tab control who's datasource is a table in a dataset. In certain situations when I add a row to the...
3
by: dm1608 | last post by:
Hello, I'm manually populating a DataGridView instead of using Data Binding. How can I clear the contents of all the rows and/or header quickly? My current method is to loop thru the grid...
0
by: Paul | last post by:
I'm creating a UserControl that uses a DataGridView in virtual mode. It was working fine other than a few bugs. After I fixed those few bugs, I broke it. I have a cache of 50 records. The...
6
by: Terry Olsen | last post by:
I have two DataGridView's loaded from their respective datasources. I want to highlight rows in one DataGridView that are also in the other DataGridView. But the following code does not work....
2
by: ashishtarlekar | last post by:
Hi all, I have to add comboboxes in the first row of datagridview for mapping the database fields. For e.g. I have to show Id, FirstName, LastName in each comboboxes in the first row. if i select...
1
by: slg | last post by:
I am using virtual mode for datagrid. After i set the rowcount property to 16000, I am receiving datagridview 's CellValueNeeded event 16000 times for each row. This is causing the application to...
2
by: colin | last post by:
Hi, I need to tell how many rows are visible on the screen, in my DataGridView control so that I can ensure my newly selected row is visible without doing any unecessry scrolling, I thought...
1
by: SePp | last post by:
Hello all, I want to display the number of items in an datagridview. I use this one datagridview for different datasets. The datagridview.Rowcount works fine for the most of the dataset. But...
2
by: Lloyd Sheen | last post by:
I am trying to find the event (if there is one) which occurs when a row is added to the DataGridView. The closest I can find is the RowsAdded event which says in documentation: Occurs after a...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.