Occasionally, you will have a need to have a form element of one binder being bound to another data source. Sitefinity CMS client binders support nesting of For developers: Generic collection binder inside of other binders and in this article we will demonstrate how to nest a bound SELECT element, bound RADIO list and bound CHECKBOX list.
Before We start, though, let us take a look at the following screenshots to visualize the task that we wish to accomplish.
<div id="storeForm" runat="server">  
</div> 
<sitefinity:FormBinder ID="formBinder" runat="server"  
            ServiceUrl="~/Sitefinity/Services/Commerce/Stores.svc"
            TargetId="storeForm"
            OnClientBinderInitialized="FormBinderInitialized"
            OnClientItemDataBound="FormItemDataBound"
            DataKeyNames="Id"
            DataMembers="Name, Description, ManagerName">  
            <Containers> 
                <sitefinity:BinderContainer runat="server">  
                    <fieldset> 
                        <legend>Store info:</legend> 
                        <label for="Name">Store name:</label> 
                        <br /> 
                        <input id="Name" type="text" value="{{Name}}" /> 
                        <br /> 
                        <label for="Description">Store description:</label> 
                        <br /> 
                        <textarea id="Description" rows="5">{{Description}}</textarea> 
                        <br /> 
                        <label for="ManagerName">Manager name:</label> 
                        <br /> 
                        <select id="ManagerName" class="optionList"></select> 
                        <br /> 
                        <input type="button" value="Save" sys:onclick="SaveStore();" /> 
                        or  
                        <a sys:href="#" sys:onclick="CancelStore();">Cancel</a> 
                    </fieldset> 
                </sitefinity:BinderContainer> 
            </Containers> 
</sitefinity:FormBinder>
 
The ItemEventArgs object passed to us in this function eases the whole process quite a lot. Let us examine this code line by line:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="StoresDropDown.aspx.cs" Inherits="StoresDropDown" %> 
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> 
<%@ Register TagPrefix="sitefinity" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %> 
 
 
<head runat="server">  
    <title></title>  
</head> 
<body xmlns:sys="javascript:Sys" xmlns:dataview="javascript:Sys.UI.DataView" sys:activate="*" xmlns:code="http://schemas.microsoft.com/aspnet/code ">  
    <form id="form1" runat="server">  
 
        <asp:ScriptManager ID="scriptManager1" runat="server">  
            <Scripts> 
                <asp:ScriptReference Name="MicrosoftAjax.js" Path="~/Sitefinity/Scripts/MicrosoftAjax.js" /> 
                <asp:ScriptReference ScriptMode="Inherit" Path="~/Sitefinity/Scripts/MicrosoftAjaxTemplates.js" /> 
                <asp:ScriptReference ScriptMode="Inherit" Path="~/Sitefinity/Scripts/MicrosoftAjaxAdoNet.js" /> 
            </Scripts> 
        </asp:ScriptManager> 
 
        <h2> 
            Stores drop down  
        </h2> 
        <a href="Employees.aspx">Employees</a>   
        |   
        <strong>Stores drop down</strong> 
        |  
        <a href="StoresCheckboxes.aspx">Stores checkboxes</a> 
        |  
        <a href="StoresRadioButtons.aspx">Stores radiobuttons</a> 
 
        <hr /> 
        <input id="NewStoreButton" type="button" value="New store" onclick="NewStore();" /> 
 
        <div id="storeForm" runat="server">  
        </div> 
 
        <telerik:RadGrid ID="storesGrid" runat="server" AutoGenerateColumns="false">  
            <MasterTableView> 
                <Columns> 
                    <telerik:GridTemplateColumn UniqueName="BinderContainer0"></telerik:GridTemplateColumn> 
                    <telerik:GridTemplateColumn UniqueName="BinderContainer1"></telerik:GridTemplateColumn> 
                    <telerik:GridTemplateColumn UniqueName="BinderContainer2"></telerik:GridTemplateColumn> 
                    <telerik:GridTemplateColumn UniqueName="BinderContainer3"></telerik:GridTemplateColumn> 
                </Columns> 
            </MasterTableView> 
        </telerik:RadGrid> 
 
        <sitefinity:FormBinder ID="formBinder" runat="server"  
            ServiceUrl="~/Sitefinity/Services/Commerce/Stores.svc"
            TargetId="storeForm"
            OnClientBinderInitialized="FormBinderInitialized"
            OnClientItemDataBound="FormItemDataBound"
            DataKeyNames="Id"
            DataMembers="Name, Description, ManagerName">  
            <Containers> 
                <sitefinity:BinderContainer runat="server">  
                    <fieldset> 
                        <legend>Store info:</legend> 
                        <label for="Name">Store name:</label> 
                        <br /> 
                        <input id="Name" type="text" value="{{Name}}" /> 
                        <br /> 
                        <label for="Description">Store description:</label> 
                        <br /> 
                        <textarea id="Description" rows="5">{{Description}}</textarea> 
                        <br /> 
                        <label for="ManagerName">Manager name:</label> 
                        <br /> 
                        <select id="ManagerName" class="optionList"></select> 
                        <br /> 
                        <input type="button" value="Save" sys:onclick="SaveStore();" /> 
                        or  
                        <a sys:href="#" sys:onclick="CancelStore();">Cancel</a> 
                    </fieldset> 
                </sitefinity:BinderContainer> 
            </Containers> 
        </sitefinity:FormBinder> 
 
        <sitefinity:RadGridBinder ID="gridBinder" runat="server"
            ServiceUrl="~/Sitefinity/Services/Commerce/Stores.svc"
            TargetId="storesGrid"
            BindOnLoad="true"
            OnClientBinderInitialized="GridBinderInitialized"
            OnClientItemEditCommand="GridEditCommand"
            DataKeyNames="Id"
            DataMembers="Name, Description, ManagerName">  
            <Containers> 
                <sitefinity:BinderContainer runat="server">  
                    <input type="button" value="Edit" class="editCommand" /> 
                </sitefinity:BinderContainer> 
                <sitefinity:BinderContainer runat="server">  
                    {{Name}}  
                </sitefinity:BinderContainer>           
                <sitefinity:BinderContainer runat="server">  
                    {{Description}}  
                </sitefinity:BinderContainer> 
                <sitefinity:BinderContainer runat="server">  
                    {{ManagerName}}  
                </sitefinity:BinderContainer> 
            </Containers> 
        </sitefinity:RadGridBinder> 
 
        <sitefinity:GenericCollectionBinder ID="employeesBinder" runat="server"
            ServiceUrl="~/Sitefinity/Services/Commerce/Employees.svc"
            OnClientBinderInitialized="EmployeesBinderInitialized"
            DataKeyNames="Id"
            DataMembers="Name">  
            <Containers> 
                <sitefinity:BinderContainer runat="server" RenderContainer="false" TemplateHolderTag="Select">  
                    <option value="{{Name}}">{{Name}}</option> 
                </sitefinity:BinderContainer> 
            </Containers>      
        </sitefinity:GenericCollectionBinder> 
 
        <script type="text/javascript">  
 
            var formBinder;  
            var gridBinder;  
            var employeesBinder;  
 
            function FormBinderInitialized(sender, args) {  
                formBinder = sender;  
                formBinder.AddValidationRule('Name', 'required', 'Name is a required field');  
            }  
 
            function GridBinderInitialized(sender, args) {  
                gridBinder = sender;  
            }  
 
            function EmployeesBinderInitialized(sender, args) {  
                employeesBinder = sender;  
            }  
 
            function NewStore() {  
                formBinder.New();  
                formBinder.get_globalDataKeys()["Id"] = formBinder.GetEmptyGuid();  
            }  
 
            function SaveStore() {  
                if (formBinder.SaveChanges()) {  
                    formBinder.ClearTarget();  
                    gridBinder.DataBind();  
                }  
            }  
 
            function CancelStore() {  
                formBinder.ClearTarget();  
                return false;                
            }  
 
            function GridEditCommand(sender, args) {  
                formBinder.get_globalDataKeys()["Id"] = args.get_key()["Id"];  
                formBinder.DataBind();  
            }  
 
            function FormItemDataBound(sender, args) {  
                var target = args.FindControl('ManagerName');  
                if (args.get_dataItem()) {  
                    employeesBinder.set_selectedValue(args.get_dataItem().ManagerName);  
                }  
                employeesBinder.set_target(target);  
                employeesBinder.DataBind();  
            }  
        </script>
</body> 
</html>