Using FormTemplate/UserControl
This article will show you how you can retrieve the values from FormTemplate and WebUserControl edit forms on insert command. You can afterwards use them to perform your own inserting logic to your treelist datasource.
Inserting values using FormTemplate
The main logic here lies on using the FindControl(controlID) method - once you obtain a reference to the TreeListEditFormInsertItem you can easily access the controls in it by ID.
<telerik:RadTreeList RenderMode="Lightweight" ID="RadTreeList1" runat="server" DataKeyNames="EmployeeID" ParentDataKeyNames="ReportsTo"
AutoGenerateColumns="false" EditMode="EditForms" DataSourceID="SqlDataSource1"
OnInsertCommand="RadTreeList1_InsertCommand">
<Columns>
<telerik:TreeListBoundColumn DataField="EmployeeID" HeaderText="EmployeeID"
UniqueName="EmployeeID" ReadOnly="true" />
<telerik:TreeListBoundColumn DataField="LastName" HeaderText="LastName"
UniqueName="LastName" />
<telerik:TreeListBoundColumn DataField="FirstName" HeaderText="FirstName"
UniqueName="FirstName" />
<telerik:TreeListBoundColumn DataField="HomePhone" HeaderText="HomePhone"
UniqueName="HomePhone" />
<telerik:TreeListDateTimeColumn DataField="HireDate" HeaderText="HireDate"
UniqueName="HireDate" />
<telerik:TreeListBoundColumn DataField="ReportsTo" HeaderText="ReportsTo"
UniqueName="ReportsTo" ReadOnly="true" />
<telerik:TreeListEditCommandColumn UniqueName="EditColumn" />
</Columns>
<EditFormSettings EditFormType="Template">
<FormTemplate>
<table>
<tr>
<td>
FirstName:
</td>
<td>
<asp:TextBox ID="TextBox1" Text='<%# Bind("FirstName") %>' runat="server">
</asp:TextBox>
</td>
</tr>
<tr>
<td>
Last Name:
</td>
<td>
<asp:TextBox ID="TextBox2" Text='<%# Bind("LastName") %>' runat="server">
</asp:TextBox>
</td>
</tr>
<tr>
<td>
Home Phone:
</td>
<td>
<telerik:RadMaskedTextBox RenderMode="Lightweight" ID="RadMaskedTextBox1" runat="server" SelectionOnFocus="SelectAll"
TextWithLiterals='<%# Bind("HomePhone") %>' Mask="(###) ###-####">
</telerik:RadMaskedTextBox>
</td>
</tr>
<tr>
<td>
Hire Date:
</td>
<td>
<telerik:RadDatePicker RenderMode="Lightweight" ID="RadDatePicker1" DbSelectedDate='<%# Bind("HireDate") %>'
runat="server">
</telerik:RadDatePicker>
</td>
</tr>
</table>
<asp:Button ID="btnUpdate" Text="Insert"
runat="server" CommandName="PerformInsert">
</asp:Button>
<asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False"
CommandName="Cancel"></asp:Button>
</FormTemplate>
</EditEormSettings>
</telerik:RadTreeList>
Inserting values using WebUserControl
The approach here would be similar to when using FormTemplate. The difference is the way you access the user control.
Here is sample code for extracting the values from the user control on InsertCommand event of RadTreeList:
<telerik:RadTreeList RenderMode="Lightweight" ID="RadTreeList2" runat="server" DataKeyNames="EmployeeID" ParentDataKeyNames="ReportsTo"
AutoGenerateColumns="false" EditMode="EditForms" DataSourceID="SqlDataSource1"
OnInsertCommand="RadTreeList2_InsertCommand">
<editformsettings editformtype="WebUserControl" usercontrolpath="~/WebUserControl.ascx">
<Columns>
<telerik:TreeListBoundColumn DataField="EmployeeID" HeaderText="EmployeeID" UniqueName="EmployeeID"
ReadOnly="true" />
<telerik:TreeListBoundColumn DataField="LastName" HeaderText="LastName" UniqueName="LastName" />
<telerik:TreeListBoundColumn DataField="FirstName" HeaderText="FirstName" UniqueName="FirstName" />
<telerik:TreeListBoundColumn DataField="HomePhone" HeaderText="HomePhone" UniqueName="HomePhone" />
<telerik:TreeListDateTimeColumn DataField="HireDate" HeaderText="HireDate" UniqueName="HireDate" />
<telerik:TreeListBoundColumn DataField="ReportsTo" HeaderText="ReportsTo" UniqueName="ReportsTo" ReadOnly="true" />
<telerik:TreeListEditCommandColumn UniqueName="EditColumn" />
</Columns>
</editformsettings>
</telerik:RadTreeList>
Additionally, if you want the treelist to be able to extract values from the user control, the latter needs to implement the IBindable interface.Here follows a sample implementation:
<table>
<tr>
<td>
FirstName:
</td>
<td>
<asp:TextBox ID="TextBox1" Text='<%# DataBinder.Eval( Container, "DataItem.FirstName") %>'
runat="server">
</asp:TextBox>
</td>
</tr>
<tr>
<td>
Last Name:
</td>
<td>
<asp:TextBox ID="TextBox2" Text='<%# DataBinder.Eval( Container, "DataItem.LastName") %>'
runat="server">
</asp:TextBox>
</td>
</tr>
<tr>
<td>
Home Phone:
</td>
<td>
<telerik:RadMaskedTextBox RenderMode="Lightweight" ID="RadMaskedTextBox1" runat="server" SelectionOnFocus="SelectAll"
TextWithLiterals='<%# DataBinder.Eval( Container, "DataItem.HomePhone") %>' Mask="(###) ###-####">
</telerik:RadMaskedTextBox>
</td>
</tr>
<tr>
<td>
Hire Date:
</td>
<td>
<telerik:RadDatePicker RenderMode="Lightweight" ID="RadDatePicker1" DbSelectedDate='<%# DataBinder.Eval( Container, "DataItem.HireDate") %>'
runat="server">
</telerik:RadDatePicker>
</td>
</tr>
</table>
<asp:Button ID="btnUpdate" Text="Insert" runat="server" CommandName="PerformInsert"
</asp:Button>
<asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False"
CommandName="Cancel"></asp:Button>
Note that RadTreeList expects the newly inserted value of the field that is specified as DataKeyNames to be larger than any of the already available values of this field in the datasource.