Hi
The following is my code.
<
telerik:RadWizard
runat
=
"server"
ID
=
"RadWizard1"
OnWizardStepCreated
=
"RadWizard1_WizardStepCreated"
>
<
WizardSteps
>
<
telerik:RadWizardStep
ID
=
"rwsStart"
Title
=
"شروع"
StepType
=
"Start"
>
</
telerik:RadWizardStep
>
<
telerik:RadWizardStep
ID
=
"rwsEnd"
Title
=
"پایان"
StepType
=
"Finish"
>
</
telerik:RadWizardStep
>
</
WizardSteps
>
<
Localization
Next
=
"بعدی"
Cancel
=
"انصراف"
Finish
=
"پایان"
Previous
=
"قبلی"
/>
</
telerik:RadWizard
>
<
asp:Timer
ID
=
"Timer1"
runat
=
"server"
Interval
=
"10000"
OnTick
=
"Timer1_Tick"
Enabled
=
"True"
>
</
asp:Timer
>
When the timer post back page. There is an error to say:
Multiple controls with the same ID 'rwsEnd' were found. FindControl requires that controls have unique IDs.
13 Answers, 1 is accepted

protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!IsPostBack)
{
var myData =
new
DataAccess();
myData.TesMasterIdFk = MasterId;
myData.TesId = TestId;
DataRow tRow = myData.TestDetailsReturn();
lblTime.Text = tRow[
"TesTotalTimeLabel"
].ToString();
DataTable qTbl =
new
DataTable();
myData.QueTestIdFk = TestId;
myData.QueMasterIdFk = MasterId;
qTbl = myData.QuestionsOfTestReturn();
foreach
(DataRow myRow
in
qTbl.Rows)
{
RadWizardStep step =
new
RadWizardStep();
step.ID =
"Q"
+ myRow[
"QueId"
];
step.Title = myRow[
"QueTitle"
].ToString();
RadWizard1.WizardSteps.AddAt(1, step);
}
}
}
public
void
Timer1_Tick(
object
sender, EventArgs e)
{
RadWizard1.ActiveStepIndex = RadWizard1.WizardSteps.Count-1;
RadWizard1.Enabled =
false
;
}
protected
void
RadWizard1_WizardStepCreated(
object
sender, WizardStepCreatedEventArgs e)
{
var myData =
new
DataAccess();
DataTable qTbl =
new
DataTable();
myData.QueTestIdFk = TestId;
myData.QueMasterIdFk = MasterId;
qTbl = myData.QuestionsOfTestReturn();
foreach
(DataRow myRow
in
qTbl.Rows)
{
if
(e.RadWizardStep.ID ==
"Q"
+ myRow[
"QueId"
])
{
Panel myPan =
new
Panel();
myPan.CssClass =
"tCss"
;
//Add Label
Label label =
new
Label();
label.Text = myRow[
"QueTitle"
].ToString();
label.CssClass =
"testLabel"
;
myPan.Controls.Add(label);
myData.ChoMasterIdFk = MasterId;
myData.ChoTestIdFk = TestId;
myData.ChoQuestionIdFk = Convert.ToInt64(myRow[
"QueId"
].ToString());
var choTbl =
new
DataTable();
choTbl = myData.ChoisesOfQuestionReturn();
foreach
(DataRow myChoises
in
choTbl.Rows)
{
//Add Choises
RadioButton radioBut =
new
RadioButton();
radioBut.Text = myChoises[
"ChoTitle"
].ToString();
myPan.Controls.Add(radioBut);
}
e.RadWizardStep.Controls.Add(myPan);
}
}
}

Hi
I'm waiting for an answer.
Please tell me what I can do?
I have tested the same scenario in an isolated page but it worked correctly at my side. I am attaching my test page. Please review it and let me know what else to add in order to observe the same error.
Regards,
Plamen
Telerik

Hi
This is my project. Please tell me what's problem and it's solution.
Thanks.
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
<
style
type
=
"text/css"
>
.lblCss {
display: block;
}
.panCss {
font-family: tahoma;
}
</
style
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:radscriptmanager
ID
=
"RadScriptManager1"
runat
=
"server"
></
telerik:radscriptmanager
>
<
div
>
<
telerik:radwizard
runat
=
"server"
ID
=
"RadWizard1"
OnWizardStepCreated
=
"RadWizard1_WizardStepCreated"
>
<
WizardSteps
>
<
telerik:RadWizardStep
ID
=
"rwsStart"
Title
=
"Start"
StepType
=
"Start"
>
</
telerik:RadWizardStep
>
<
telerik:RadWizardStep
ID
=
"rwsEnd"
Title
=
"Finish"
StepType
=
"Finish"
>
</
telerik:RadWizardStep
>
</
WizardSteps
>
</
telerik:radwizard
>
</
div
>
<
asp:Timer
ID
=
"Timer1"
runat
=
"server"
Interval
=
"10000"
OnTick
=
"Timer1_Tick"
Enabled
=
"True"
>
</
asp:Timer
>
</
form
>
</
body
>
</
html
>
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!IsPostBack)
{
GetQuestionTable();
GetChoicesTable();
CreateSteps();
}
}
protected
void
RadWizard1_WizardStepCreated(
object
sender, WizardStepCreatedEventArgs e)
{
DataTable tblQuestions =
new
DataTable();
tblQuestions = GetQuestionTable();
foreach
(DataRow qRow
in
tblQuestions.Rows)
{
if
(e.RadWizardStep.ID ==
"Q"
+ qRow[
"id"
])
{
Panel containerPan =
new
Panel();
containerPan.CssClass =
"panCss"
;
//Add Label
Label label =
new
Label();
label.Text = qRow[
"title"
].ToString();
label.CssClass =
"lblCss"
;
containerPan.Controls.Add(label);
var tblCoices =
new
DataTable();
tblCoices = GetChoicesTable();
DataRow[] tbl =tblCoices.Select(
"questionIdFk="
+ qRow[
"id"
]);
foreach
(DataRow myChoises
in
tbl)
{
//Add Choises
RadioButton radioBut =
new
RadioButton();
radioBut.ID =
"Ch"
+ myChoises[
"id"
];
radioBut.Text = myChoises[
"title"
].ToString();
radioBut.AutoPostBack =
true
;
radioBut.GroupName = Guid.NewGuid().ToString();
//radioBut.CheckedChanged += radioButtons_CheckedChanged;
containerPan.Controls.Add(radioBut);
}
e.RadWizardStep.Controls.Add(containerPan);
}
}
}
public
void
Timer1_Tick(
object
sender, EventArgs e)
{
RadWizard1.ActiveStepIndex = RadWizard1.WizardSteps.Count - 1;
RadWizard1.Enabled =
false
;
}
private
DataTable GetQuestionTable()
{
//Creating Question Table
var tblQuestions =
new
DataTable();
tblQuestions.Columns.Add(
"id"
);
tblQuestions.Columns.Add(
"title"
);
for
(
int
i = 0; i < 10; i++)
{
DataRow questionRow = tblQuestions.NewRow();
questionRow[
"id"
] = i;
questionRow[
"title"
] =
"Question "
+ i;
tblQuestions.Rows.Add(questionRow);
}
return
tblQuestions;
}
private
DataTable GetChoicesTable()
{
//Creating Choices Table
var tblChoices =
new
DataTable();
tblChoices.Columns.Add(
"id"
);
tblChoices.Columns.Add(
"title"
);
tblChoices.Columns.Add(
"questionIdFk"
);
int
k = 1;
for
(
int
i = 0; i < 10; i++)
{
for
(
int
j = 0; j < 4; j++)
{
DataRow rowChoices = tblChoices.NewRow();
rowChoices[
"id"
] = k;
rowChoices[
"title"
] =
"Choice Number: "
+ (j+1);
rowChoices[
"questionIdFk"
] = i;
tblChoices.Rows.Add(rowChoices);
k++;
}
}
return
tblChoices;
}
private
void
CreateSteps()
{
//Creating Steps of Wizard
var tblQuestions =
new
DataTable();
tblQuestions = GetQuestionTable();
foreach
(DataRow qRow
in
tblQuestions.Rows)
{
RadWizardStep step =
new
RadWizardStep();
step.ID =
"Q"
+ qRow[
"id"
];
step.Title = qRow[
"title"
].ToString();
RadWizard1.WizardSteps.AddAt(1, step);
}
}

Please answer me.
It's important for me to solve this problem quickly.
It seems that at some moment you are setting the same IDs to the wizard steps. Yet I have tested the issue at my side and it worked correctly. The issue may be coming from your custom DataSource. Would you please let me know what else should I add to the sample page I sent you to be able to replicate the issue and be more helpful with a possible solution.
Regards,
Plamen
Telerik

Hi
I wrote all my codes in my page, there are no other codes.
Please create project and test it.
I have tested the issue once again but unfortunately could not replicate it once again. It seems that the issue is caused by your custom data that is pushing the same ids. Please try to replicate the issue without your custom DataBase and share the code so we could be more helpful.
Regards,
Plamen
Telerik

Here is my project.
https://onedrive.live.com/redir?resid=2673FD1F430E2666!937&authkey=!AHaU5u6TGQcVcUs&ithint=file%2crar
There is no other datasource here. If you test it you can see the error.
I have inspected code that you provided and noticed that the issue is caused by the fact that you ahve added two of the steps from the mark up.
In cases when the steps are going to be added and removed we recommend adding all the steps from the code behind. Here instead of mixing mark up and code behind. here is the code that worked correctly at my side:
private
void
CreateSteps()
{
RadWizardStep stepStart =
new
RadWizardStep();
stepStart.ID =
"rwsStart"
;
RadWizard1.WizardSteps.AddAt(0, stepStart);
//Creating Steps of Wizard
var tblQuestions =
new
DataTable();
tblQuestions = GetQuestionTable();
foreach
(DataRow qRow
in
tblQuestions.Rows)
{
RadWizardStep step =
new
RadWizardStep();
step.ID =
"Q"
+ qRow[
"id"
];
step.Title = qRow[
"title"
].ToString();
RadWizard1.WizardSteps.AddAt(1, step);
}
RadWizardStep stepEnd =
new
RadWizardStep();
stepEnd.ID =
"rwsEnd"
;
RadWizard1.WizardSteps.AddAt(RadWizard1.WizardSteps.Count, stepEnd);
}
<
telerik:RadWizard
runat
=
"server"
ID
=
"RadWizard1"
OnWizardStepCreated
=
"RadWizard1_WizardStepCreated"
>
</
telerik:RadWizard
>
Hope this will help you solve the issue.
Regards,
Plamen
Telerik

Hi
The reason I'm trying to both markup and code behind to create wizard steps is I want to add some information in start step and add chard to final step to show test result. In other words first and last wizards are so complex and creating them dynamically need hundred lines of codes.
Also there is a problem with your solution; when timer refreshes page all the property of wizards lost, for example title of them.
If you want to define the steps statically you will have to remove their static ids which leading to the error observed.
If you prefer to go for a dynamic steps we recommend setting the title and other properties different from id in the WizardStepCreated event so they are persisted correctly.
Here is the sample code that I used:
if
(e.RadWizardStep.ID ==
"rwsStart"
)
{
e.RadWizardStep.Title =
"Start"
;
}
Hope this will explain the issue.
Regards,
Plamen
Telerik