Hi all,
Im using the latest telerik rad ajax controls (ASP.NET AJAX Q1 2012 version 12.1.215.0). I have a treelist which has a template column whereby I placed a combobox in it. What my page does is I allow the user to select options in the combobox and when they click the save button, my function will create 1 record per row which has a selected option in the comboboxes. Here is my code
<telerik:RadAjaxLoadingPanel ID=
"RadTreeAjax"
runat=
"server"
Skin=
"Windows7"
EnableSkinTransparency=
"False"
Transparency=
"30"
/>
<telerik:RadTreeList ID=
"RadTreeList1"
runat=
"server"
AllowPaging=
"true"
PageSize=
"15"
Skin=
"Windows7"
OnNeedDataSource=
"RadTreeList1_OnNeedDataSource"
OnItemDataBound=
"RadTreeList1_OnItemDataBound"
AutoGenerateColumns=
"false"
AllowSorting=
"true"
DataKeyNames=
"ParentId"
ParentDataKeyNames=
"GoalId"
Width=
"1070px"
GridLines=
"None"
>
<Columns>
<telerik:TreeListBoundColumn DataField=
"Id"
UniqueName=
"Id"
HeaderText=
"Id"
Visible=
"false"
/>
<telerik:TreeListBoundColumn DataField=
"ParentId"
UniqueName=
"ParentId"
HeaderText=
"ParentId"
Visible=
"false"
/>
<telerik:TreeListBoundColumn DataField=
"GoalId"
UniqueName=
"GoalId"
HeaderText=
"GoalId"
Visible=
"false"
/>
<telerik:TreeListBoundColumn DataField=
"InterventionId"
UniqueName=
"InterventionId"
HeaderText=
"InterventionId"
Visible=
"false"
/>
<telerik:TreeListBoundColumn DataField=
"Goal"
UniqueName=
"Goal"
HeaderText=
"Goal"
ItemStyle-Width=
"320px"
HeaderStyle-Width=
"320px"
/>
<telerik:TreeListBoundColumn DataField=
"Intervention"
UniqueName=
"Intervention"
HeaderText=
"Intervention"
ItemStyle-Width=
"495px"
HeaderStyle-Width=
"495px"
/>
<telerik:TreeListTemplateColumn UniqueName=
"GoalStatus"
HeaderText=
"Status"
ItemStyle-Width=
"100px"
HeaderStyle-Width=
"100px"
>
<ItemTemplate>
<telerik:RadComboBox ID=
"ddlGoalStatus"
Width=
"90px"
Filter=
"StartsWith"
AllowCustomText=
"true"
EmptyMessage=
""
AutoPostBack=
"true"
EnableViewState=
"true"
runat=
"server"
Skin=
"Windows7"
CssClass=
"tabbar_tasklist_last"
RegisterWithScriptManager=
"False"
>
</telerik:RadComboBox>
</ItemTemplate>
</telerik:TreeListTemplateColumn>
<telerik:TreeListTemplateColumn UniqueName=
"InterventionStatus"
ItemStyle-Width=
"105px"
HeaderStyle-Width=
"105px"
>
<ItemTemplate>
<telerik:RadComboBox ID=
"ddlInterventionStatus"
Width=
"95px"
Filter=
"StartsWith"
AllowCustomText=
"true"
EmptyMessage=
""
AutoPostBack=
"true"
runat=
"server"
Skin=
"Windows7"
CssClass=
"tabbar_tasklist_last"
RegisterWithScriptManager=
"False"
>
</telerik:RadComboBox>
</ItemTemplate>
</telerik:TreeListTemplateColumn>
</Columns>
</telerik:RadTreeList>
protected
void
RadTreeList1_OnNeedDataSource(
object
sender, TreeListNeedDataSourceEventArgs e)
{
RadTreeList1.DataSource = GetGoalsAndInterventions();
}
protected
void
RadTreeList1_OnItemDataBound(
object
sender, Telerik.Web.UI.TreeListItemDataBoundEventArgs e)
{
if
(e.Item
is
TreeListDataItem)
{
TreeListDataItem dataItem = e.Item
as
TreeListDataItem;
RadComboBox ddlGoalStatus = (RadComboBox)e.Item.FindControl(
"ddlGoalStatus"
);
RadComboBox ddlInterventionStatus = (RadComboBox)e.Item.FindControl(
"ddlInterventionStatus"
);
ddlGoalStatus.DataSource = GetGoalStatusMaster();
ddlGoalStatus.DataValueField =
"GoalStatusId"
;
ddlGoalStatus.DataTextField =
"Value"
;
ddlGoalStatus.DataBind();
ddlInterventionStatus.DataSource = GetInterventionStatusMaster();
ddlInterventionStatus.DataValueField =
"InterventionStatusId"
;
ddlInterventionStatus.DataTextField =
"Value"
;
ddlInterventionStatus.DataBind();
if
(dataItem.ItemType == TreeListItemType.Item || dataItem.ItemType == TreeListItemType.AlternatingItem)
{
TableCell cell = dataItem[
"ParentId"
];
string
value = cell.Text;
if
(value !=
" "
)
{
ddlInterventionStatus.Visible =
false
;
ddlGoalStatus.Visible =
true
;
}
TableCell cell2 = dataItem[
"InterventionId"
];
string
value2 = cell2.Text;
if
(value2 !=
" "
)
{
ddlGoalStatus.Visible =
false
;
ddlInterventionStatus.Visible =
true
;
}
}
}
}
private
void
SaveGoalStatus()
{
// delete all goal status from database
DeleteInterventionStatus();
DeleteGoalStatus();
foreach
(TreeListDataItem item
in
RadTreeList1.Items)
{
string
s1 =
string
.Empty;
string
s2 =
string
.Empty;
RadComboBox ddlInterventionStatus = (RadComboBox)item.FindControl(
"ddlInterventionStatus"
);
if
(item.ItemType == TreeListItemType.Item || item.ItemType == TreeListItemType.AlternatingItem)
{
RadComboBox ddlGoalStatus = (RadComboBox)item.FindControl(
"ddlGoalStatus"
);
string
s = ddlGoalStatus.SelectedItem.Text;
if
(ddlGoalStatus.SelectedItem !=
null
)
{
TableCell cell = item[
"Id"
];
string
ProblemGoalId = cell.Text;
if
(ProblemGoalId !=
" "
)
{
try
{
CarePlan_GoalStatus oGoalStatus =
new
CarePlan_GoalStatus();
oGoalStatus.CarePlanId =
this
.CarePlanID;
oGoalStatus.ProblemGoalId =
new
Guid(ProblemGoalId);
oGoalStatus.GoalStatusId = GetGoalId(s);
oGoalStatus.CreatedBy =
this
.UserId;
oGoalStatus.ModifiedBy =
this
.UserId;
oGoalStatus = WCFSvcClient.CCITDataService.Insert(oGoalStatus)
as
CarePlan_GoalStatus;
}
catch
(Exception ex)
{
lblMessage.Text =
"Create Goal Status"
+ ex.Message;
}
}
}
}
if
(ddlInterventionStatus.SelectedItem !=
null
)
{
if
(item.ItemType == TreeListItemType.Item || item.ItemType == TreeListItemType.AlternatingItem)
{
TableCell cell = item[
"Id"
];
string
GoalInterventionId = cell.Text;
if
(GoalInterventionId !=
" "
)
{
try
{
CarePlan_InterventionStatus oInterventionStatus =
new
CarePlan_InterventionStatus();
oInterventionStatus.CarePlanId =
this
.CarePlanID;
oInterventionStatus.GoalInterventionId =
new
Guid(GoalInterventionId);
oInterventionStatus.InterventionStatusId =
new
Guid(ddlInterventionStatus.SelectedItem.Value);
oInterventionStatus.CreatedBy =
this
.UserId;
oInterventionStatus.ModifiedBy =
this
.UserId;
oInterventionStatus = WCFSvcClient.CCITDataService.Insert(oInterventionStatus)
as
CarePlan_InterventionStatus;
}
catch
(Exception ex)
{
lblMessage.Text =
"Create Intervention Status"
+ ex.Message;
}
}
}
#region Populate Info On Page
BindToViewState();
// call first to populate the ddlSection selection
DisplayCarePlanInfoOnPage();
// the values are originally populated on selected change of ddlSection but due to population of data on first load of page
// the page has no selected index change, this this has to be done manually
GetProblemBySection(ddlSection.SelectedItem.Value);
// call again to GET the selected value of ddlProblem
DisplayCarePlanInfoOnPage();
foreach
(DataRow row
in
ProblemTable.Rows)
{
if
(row[
"Value"
].ToString() == ddlProblem.SelectedItem.Text)
txtProblemDescription.Text = row[
"Description"
].ToString();
}
#endregion
}
}
}
<telerik:RadAjaxManager ID=
"RadAjaxManager1"
runat=
"server"
>
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID=
"ddlSection"
>
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID=
"ddlSection"
/>
<telerik:AjaxUpdatedControl ControlID=
"ddlProblem"
/>
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID=
"ddlProblem"
>
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID=
"ddlProblem"
/>
<telerik:AjaxUpdatedControl ControlID=
"txtProblemDescription"
/>
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID=
"RadTreeList1"
>
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID=
"RadTreeList1"
LoadingPanelID=
"RadTreeAjax"
/>
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID=
"cpTB"
>
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID=
"CarePlanPanel"
LoadingPanelID=
"CarePlanAjax"
/>
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID=
"btnSearch"
>
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID=
"Panel1"
/>
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
A little explanation bout my page is onpageload if there is an existing data in the database I will populate the treelist and also bind the comboboxes in the treelist based on the value saved in the database (this works fine). But my problem now is when I select a different value and click the save button, it is supposed to create a row in my database table with the new combobox selection however it doesnt.
As you can see, I bind my comboboxes in the itemdatabound and in my Save function what I do is I clear my database table and then I reinsert new rows into the table based on rows in the treelist which has a selected value in the combobox. As for now I am only testing based on ddlGoalStatus combobox so please ignore the ddlInterventionStatus combobox. In my save function, I have a line which says "string s = ddlGoalStatus.SelectedItem.Text;" and the value I retrieved is ALWAYS the previous value and not the newly selected value. Am I doing anything wrong?
Please help.
Thanks!