Chris Kirkman
Top achievements
Rank 1
Chris Kirkman
asked on 19 Nov 2010, 09:45 PM
I have a page view in my application. Programmatically, I add 3 pages. On each page I add a TableLayoutPanel. Inside each panel I add about 15 rows with 2 columns each. Each column has one label and one "other" control. The "other" control is one of the following...
RadTextBox
RadCheckBox
RadDropDownList
RadSpinEditor
The pages with the drop down and spin editor takes several seconds to load and my processor is pegged!
I'm not hitting the database at this time, it is definitely in the control.
RadTextBox
RadCheckBox
RadDropDownList
RadSpinEditor
The pages with the drop down and spin editor takes several seconds to load and my processor is pegged!
I'm not hitting the database at this time, it is definitely in the control.
4 Answers, 1 is accepted
0
Chris Kirkman
Top achievements
Rank 1
answered on 19 Nov 2010, 10:45 PM
One thing I've discovered. If I remove RadControl.Dock = DockStyle.Fill and just leave it alone, the UI loads quick. It seems to potentially be an issue with the TableLayoutPanel.
??
??
0
Emanuel Varga
Top achievements
Rank 1
answered on 20 Nov 2010, 03:00 AM
Hello Chris,
There is one thing you could do to speed up initial load, and that is to create and load the controls just when the page handle is being created, this event will only fire once and it is intended for lazy loading of pages.
An example would be the following (here you can test both with lazy loading and without)
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
There is one thing you could do to speed up initial load, and that is to create and load the controls just when the page handle is being created, this event will only fire once and it is intended for lazy loading of pages.
An example would be the following (here you can test both with lazy loading and without)
using
System;
using
System.Drawing;
using
System.Windows.Forms;
using
Telerik.WinControls;
using
Telerik.WinControls.UI;
public
partial
class
Form1 : Form
{
private
RadPageView radPageView1;
private
int
noRows = 10;
private
int
noColumns = 2;
public
Form1()
{
InitializeComponent();
this
.Size =
new
Size(800, 600);
this
.Controls.Add(radPageView1 =
new
RadPageView());
radPageView1.SelectedPageChanging +=
new
EventHandler<RadPageViewCancelEventArgs>(radPageView1_SelectedPageChanging);
radPageView1.SelectedPageChanged +=
new
EventHandler(radPageView1_SelectedPageChanged);
radPageView1.Dock = DockStyle.Fill;
}
protected
override
void
OnLoad(EventArgs e)
{
this
.Cursor = Cursors.WaitCursor;
base
.OnLoad(e);
for
(
int
i = 0; i < 10; i++)
{
CreatePageWithLazyLoading(i);
//CreatePage(i);
}
}
void
radPageView1_SelectedPageChanged(
object
sender, EventArgs e)
{
this
.Cursor = Cursors.Default;
}
void
radPageView1_SelectedPageChanging(
object
sender, RadPageViewCancelEventArgs e)
{
this
.Cursor = Cursors.WaitCursor;
}
private
void
CreatePageWithLazyLoading(
int
pageNo)
{
var page =
new
RadPageViewPage();
page.Text =
"Page"
+ pageNo;
page.HandleCreated +=
new
EventHandler(page_HandleCreated);
radPageView1.Pages.Add(page);
}
private
void
CreatePage(
int
pageNo)
{
var page =
new
RadPageViewPage();
page.Text =
"Page"
+ pageNo;
//here you can do some other checks, page text, page tag and so on
//after this let's load the controls.
CreateTableLayoutForPageWithControls(page);
radPageView1.Pages.Add(page);
}
void
page_HandleCreated(
object
sender, EventArgs e)
{
var page = sender
as
RadPageViewPage;
if
(page ==
null
)
{
return
;
}
//here you can do some other checks, page text, page tag and so on
//after this let's load the controls.
CreateTableLayoutForPageWithControls(page);
}
private
void
CreateTableLayoutForPageWithControls(RadPageViewPage page)
{
var tableLayout =
new
TableLayoutPanel();
tableLayout.Dock = DockStyle.Fill;
for
(
int
i = 0; i < noRows; i++)
{
tableLayout.RowStyles.Add(
new
RowStyle(SizeType.Percent, 100 / noRows));
tableLayout.RowCount++;
for
(
int
j = 0; j < noColumns; j++)
{
if
(tableLayout.ColumnCount - 1 < j)
{
tableLayout.ColumnStyles.Add(
new
ColumnStyle(SizeType.Percent, 100 / noColumns));
tableLayout.ColumnCount++;
}
var control = GetControlForRowIndex(i);
control.Text =
"Row "
+ i +
", Column "
+ j;
control.Dock = DockStyle.Fill;
tableLayout.Controls.Add(control);
}
}
page.Controls.Add(tableLayout);
}
private
RadControl GetControlForRowIndex(
int
i)
{
if
(i % 4 == 0)
{
return
new
RadTextBox();
}
else
if
(i % 3 == 0)
{
return
new
RadDropDownList();
}
else
if
(i % 2 == 0)
{
return
new
RadCheckBox();
}
else
{
return
new
RadSpinEditor();
}
}
}
Hope this helps, if you have any other questions or comments, please let me know,
Best Regards,
Emanuel Varga
Telerik WinForms MVP
0
Hi Chris,
Thank you for reporting this.
I have looked into your case and indeed we experience an issue in this scenario. Currently, I can not provide you with a work around. We will address this case in a future release. You can find its PITS item
here.
Your Telerik points have been updated for this report.
Best wishes,
Stefan
the Telerik team
Thank you for reporting this.
I have looked into your case and indeed we experience an issue in this scenario. Currently, I can not provide you with a work around. We will address this case in a future release. You can find its PITS item
here.
Your Telerik points have been updated for this report.
Best wishes,
Stefan
the Telerik team
0
Sebastian
Top achievements
Rank 1
answered on 07 Dec 2011, 10:12 PM
I had the same issue and I found other workaround. In my case I had TableLayoutPanel with RadSplittButton in each cell and each RadSplitButon was set as Dock = Fill. If I set AutoSize = false for RadSplitButton then the performance was ok and everything looks ok too.