364,033 Members | 4752 Browsing Online
Community for Developers & IT Professionals
Bytes IT Community

Slow datagrid .NET c#

hennovanrensburg@gmail.com
P: n/a
hennovanrensburg@gmail.com
Hi all,

I've noted a couple of posts regarding the speed of a datagrid in a
..net win app.

My datagrid consists of 37 rows and 12 cols, and is unacceptably slow.
How can this be? Should I load 12,000 records it's understandable.

Is it just me? Or is this normal?

Are there any other components available to substitute this
sub-standard control?

Thanks!

Nov 17 '05 #1
Share this Question
Share on Google+
4 Replies


Lars Behrmann
P: n/a
Lars Behrmann
Hi,

of course that sounds not normal. But it don't have
to be the DataGrid which is so slow! You should
Benchmark first your Database Queries. Maybe getting
the data are take the most of the time? Additional
to that it could be helpfull if you could post a little
more information about the data size and types you
load into the grid.

Cheers
Lars Behrmann

Nothing is impossible. UML is the key for all your problems.
AODL - Make your .net apps OpenOffice ready
http://aodl.sourceforge.net/

hennovanrensburg@gmail.com schrieb:
[color=blue]
> Hi all,
>
> I've noted a couple of posts regarding the speed of a datagrid in a
> .net win app.
>
> My datagrid consists of 37 rows and 12 cols, and is unacceptably slow.
> How can this be? Should I load 12,000 records it's understandable.
>
> Is it just me? Or is this normal?
>
> Are there any other components available to substitute this
> sub-standard control?
>
> Thanks![/color]

Nov 17 '05 #2

hennovanrensburg@gmail.com
P: n/a
hennovanrensburg@gmail.com
Hi thanks for your quick reply.

I did benchmark the DB query and that's not the problem. The dataset
does however consist of 4 tables and datarelations between them. So the
resulting datagrid, contains a fairly big dataset. At first I thought
that might be the problem, but even if i disable the datarelations, and
only load the primary table, it's still slowish.

The problem is more that the control repaints extrelemly slow. When
scroll up and down, it refreshes at a rediculous rate. The data types
are all the basics. Int, strings, datetimes. Nothing fancy.

dataGridProjects.DataSource = null;
EMRemote.Data.dsProjects dsProjects =
EMRemote.clsProjects.readActiveCompanyProjects();
EMRemote.Data.dsProjectTeams dsProjectTeams =
EMRemote.clsProjectTeams.readProjectTeams();
DataSet dsQuotes = EMRemote.clsQuotes.readQuotesForDisplay();
DataSet dsOrders = EMRemote.clsOrders.readOrdersForDisplay();


EMRemote.Data.dsTasks dsTasks = EMRemote.clsTasks.readTasks();

DataSet dsProjectsView = new DataSet();

dsProjectsView.Merge(dsProjects.Tables[0]);
dsProjectsView.Merge(dsProjectTeams.Tables[0]);
dsProjectsView.Merge(dsQuotes.Tables[0]);
dsProjectsView.Merge(dsOrders.Tables[0]);
dsProjectsView.Merge(dsTasks.Tables[0]);

dsProjects = null;
dsProjectTeams = null;
dsQuotes = null;
dsOrders = null;
dsTasks = null;
GC.Collect();



DataRelation drProjectProjectTeams = new DataRelation("Project Team
Members", dsProjectsView.Tables["tblProject"].Columns["pkiProjectID"],
dsProjectsView.Tables["tblProjectTeam"].Columns["fkiProjectID"],
false);
dsProjectsView.Relations.Add(drProjectProjectTeams );

DataRelation drProjectProjectQuotes = new DataRelation("Project
Quotes", dsProjectsView.Tables["tblProject"].Columns["sProjectCode"],
dsProjectsView.Tables["tblQuote"].Columns["Project"], false);
dsProjectsView.Relations.Add(drProjectProjectQuote s);

DataRelation drProjectProjectOrders = new DataRelation("Project
Orders", dsProjectsView.Tables["tblProject"].Columns["sProjectCode"],
dsProjectsView.Tables["tblOrder"].Columns["Project"], false);
dsProjectsView.Relations.Add(drProjectProjectOrder s);

DataRelation drProjectProjectTasks = new DataRelation("Project
Tasks", dsProjectsView.Tables["tblProject"].Columns["pkiProjectID"],
dsProjectsView.Tables["tblTask"].Columns["fkiProjectID"], false);
dsProjectsView.Relations.Add(drProjectProjectTasks );


DataViewManager dvManager = new DataViewManager(dsProjectsView);
dvManager.DataViewSettings["tblProject"].RowFilter =
"fkiProjectStatusID <> 7 and fkiProjectStatusID <> 8";

try
{
dataGridProjects.SetDataBinding(dvManager, "tblProject");
//dataGridProjects.DataSource =
dsProjectsView.Tables["tblProject"];
}
finally
{
dsProjectsView = null;

}

Nov 17 '05 #3

Maqsood Ahmed
P: n/a
Maqsood Ahmed
Hello,
May be you are trying to fetch results from DB in the UI thread?

Maqsood Ahmed - MCAD.net
Kolachi Advanced Technologies
http://www.kolachi.net

*** Sent via Developersdex http://www.developersdex.com ***
Nov 17 '05 #4

hennovanrensburg@gmail.com
P: n/a
hennovanrensburg@gmail.com
Hmmm.... I'm not sure that's the problem.

I wrote the dataset to xml and it's 115KB. I also created a seperate
win app just to load this dataset in a plain datagrid, but with no
improvement.

Could i post the xml dataset?

The code in the test win app is as simple as


DataSet ds = new DataSet();
ds.ReadXmlSchema("c:\\xml.xsd");
ds.ReadXml("c:\\xml.xml");
dataGrid1.DataSource = ds.Tables[0];

The XML schema is this

<?xml version="1.0" standalone="yes"?>
<xs:schema id="NewDataSet" xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true"
msdata:Locale="en-ZA">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="tblProject">
<xs:complexType>
<xs:sequence>
<xs:element name="pkiProjectID" msdata:ReadOnly="true"
msdata:AutoIncrement="true" type="xs:int" />
<xs:element name="sBusinessPartnerCode" type="xs:string"
/>
<xs:element name="dClientRate" type="xs:decimal" />
<xs:element name="fkiCompanyID" type="xs:int" />
<xs:element name="fkiDivisionID" type="xs:int" />
<xs:element name="sProjectCode" type="xs:string" />
<xs:element name="sProjectName" type="xs:string" />
<xs:element name="sProjectDescription" type="xs:string"
minOccurs="0" />
<xs:element name="fkiProjectLead" type="xs:int" />
<xs:element name="fkiProjectManager" type="xs:int" />
<xs:element name="dtPlannedStart" type="xs:dateTime" />
<xs:element name="dtPlannedFinish" type="xs:dateTime" />
<xs:element name="dtActualStart" type="xs:dateTime" />
<xs:element name="dtActualFinish" type="xs:dateTime" />
<xs:element name="dtCreatedOn" type="xs:dateTime" />
<xs:element name="fkiCreatedBy" type="xs:int" />
<xs:element name="dtRevisedOn" type="xs:dateTime" />
<xs:element name="fkiRevisedBy" type="xs:int" />
<xs:element name="fkiCalenderID" type="xs:int" />
<xs:element name="fkiProjectStatusID" type="xs:int" />
<xs:element name="fkiProjectPhaseID" type="xs:int" />
<xs:element name="dPercComplete" type="xs:decimal" />
<xs:element name="bDeleted" type="xs:boolean" />
<xs:element name="CardName" type="xs:string"
minOccurs="0" />
<xs:element name="sProjectStatus" type="xs:string"
minOccurs="0" />
<xs:element name="PlannedHours" type="xs:decimal"
minOccurs="0" />
<xs:element name="ActualHours" type="xs:decimal"
minOccurs="0" />
<xs:element name="AvgPercComplete" type="xs:decimal"
minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="tblProjectTeam">
<xs:complexType>
<xs:sequence>
<xs:element name="pkiProjectTeamID"
msdata:ReadOnly="true" msdata:AutoIncrement="true" type="xs:int" />
<xs:element name="fkiProjectID" type="xs:int" />
<xs:element name="fkiPersonID" type="xs:int" />
<xs:element name="fkiProjectRoleID" type="xs:int" />
<xs:element name="sFullName" type="xs:string"
minOccurs="0" />
<xs:element name="sRoleName" type="xs:string"
minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="tblQuote">
<xs:complexType>
<xs:sequence>
<xs:element name="DocEntry" type="xs:int" minOccurs="0"
/>
<xs:element name="DocNum" type="xs:int" minOccurs="0" />
<xs:element name="DocDate" type="xs:dateTime"
minOccurs="0" />
<xs:element name="CardCode" type="xs:string"
minOccurs="0" />
<xs:element name="fkiCompanyID" type="xs:int"
minOccurs="0" />
<xs:element name="Project" type="xs:string" minOccurs="0"
/>
<xs:element name="Total" type="xs:decimal" minOccurs="0"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="tblOrder">
<xs:complexType>
<xs:sequence>
<xs:element name="DocEntry" type="xs:int" minOccurs="0"
/>
<xs:element name="DocNum" type="xs:int" minOccurs="0" />
<xs:element name="DocDate" type="xs:dateTime"
minOccurs="0" />
<xs:element name="CardCode" type="xs:string"
minOccurs="0" />
<xs:element name="fkiCompanyID" type="xs:int"
minOccurs="0" />
<xs:element name="Project" type="xs:string" minOccurs="0"
/>
<xs:element name="Total" type="xs:decimal" minOccurs="0"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="tblTask">
<xs:complexType>
<xs:sequence>
<xs:element name="pkiTaskID" msdata:ReadOnly="true"
msdata:AutoIncrement="true" type="xs:int" />
<xs:element name="fkiCompanyID" type="xs:int" />
<xs:element name="LineNum" type="xs:int" />
<xs:element name="fkiProjectID" type="xs:int" />
<xs:element name="fkiProjectPhaseID" type="xs:int" />
<xs:element name="Description" type="xs:string" />
<xs:element name="dtPlannedStart" type="xs:dateTime" />
<xs:element name="dtPlannedFinish" type="xs:dateTime" />
<xs:element name="dPlannedHours" type="xs:decimal" />
<xs:element name="dtActualStart" type="xs:dateTime" />
<xs:element name="dtActualFinish" type="xs:dateTime" />
<xs:element name="dPercComplete" type="xs:decimal" />
<xs:element name="dActualHours" type="xs:decimal"
minOccurs="0" />
<xs:element name="sPhaseName" type="xs:string"
minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="dsProjectsKey1" msdata:PrimaryKey="true">
<xs:selector xpath=".//tblProject" />
<xs:field xpath="pkiProjectID" />
</xs:unique>
<xs:unique name="dsProjectTeamsKey1" msdata:PrimaryKey="true">
<xs:selector xpath=".//tblProjectTeam" />
<xs:field xpath="pkiProjectTeamID" />
</xs:unique>
<xs:unique name="dsTasksKey1" msdata:PrimaryKey="true">
<xs:selector xpath=".//tblTask" />
<xs:field xpath="pkiTaskID" />
<xs:field xpath="fkiCompanyID" />
<xs:field xpath="LineNum" />
</xs:unique>
</xs:element>
<xs:annotation>
<xs:appinfo>
<msdata:Relationship name="Project_x0020_Team_x0020_Members"
msdata:parent="tblProject" msdata:child="tblProjectTeam"
msdata:parentkey="pkiProjectID" msdata:childkey="fkiProjectID" />
<msdata:Relationship name="Project_x0020_Quotes"
msdata:parent="tblProject" msdata:child="tblQuote"
msdata:parentkey="sProjectCode" msdata:childkey="Project" />
<msdata:Relationship name="Project_x0020_Orders"
msdata:parent="tblProject" msdata:child="tblOrder"
msdata:parentkey="sProjectCode" msdata:childkey="Project" />
<msdata:Relationship name="Project_x0020_Tasks"
msdata:parent="tblProject" msdata:child="tblTask"
msdata:parentkey="pkiProjectID" msdata:childkey="fkiProjectID" />
</xs:appinfo>
</xs:annotation>
</xs:schema>

Nov 17 '05 #5

Post your reply

Help answer this question



Didn't find the answer to your C# / C Sharp question?

You can also browse similar questions: C# / C Sharp