I am working on a project with RadTreeView.
I am trying to bind the Nodes with names coming from db.
Data binding is done when the remark panel is opened(when 'Remark' is clicked' so not in Page_Load because Page Load is just for opening the main page. If I am wrong please correct me.
However, I am getting the error:
System.Web.HttpException: 'DataBinding: 'System.Web.UI.WebControls.SqlDataSource' does not contain a property with the name 'Name'.'
Please find my server and clients code as below.
.ascx
<telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
<script>
function OpenEditWindow() {
var appWindow = $find("<%=rdwRemark.ClientID%>");
appWindow.show();
}
function CloseEditWindow() {
var appWindow = $find("<%=rdwRemark.ClientID%>");
appWindow.close();
}
</script>
</telerik:RadScriptBlock>
<telerik:RadWindow ID="rdwRemark" runat="server" Title="Remark"
Width="375" Height="400"
Behaviors="Close"
Modal="true"
CenterIfModal="true"
Skin="Telerik">
<ContentTemplate>
<telerik:RadAjaxPanel ID="RadAjaxPanel3" runat="server">
<asp:HiddenField ID="hdnOrderId" runat="server" />
<telerik:RadTreeView RenderMode="Lightweight" runat="server" ID="RadTreeView1"
EnableDragAndDrop="false"
OnClientNodeDropping="onDropping" EnableDragAndDropBetweenNodes="false">
<Nodes>
<telerik:RadTreeNode runat="server" Text="Alt Yuklenici" AllowDrag="false">
<NodeTemplate>
<%#DataBinder.Eval(SqlDataSource1 , "Name") %>
</NodeTemplate>
</telerik:RadTreeNode>
</Nodes>
</telerik:RadTreeView>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:TTMS_DB %>"
SelectCommand="Select [Name] from [TTMS].[P21].[P_Master_Subcontractors] "></asp:SqlDataSource>
</telerik:RadAjaxPanel>
</ContentTemplate>
</telerik:RadWindow>
.ascx.cs
protected void grdOrder_ItemCommand(object sender, GridCommandEventArgs e)
{
if (e.CommandName == "Remark")
{
RadTreeView1.DataBind(); //data bind is done when Remark is clicked.
var orderval = (e.Item as GridDataItem).GetDataKeyValue("ORDER_ID").ToString();
var orderData = pmsSrv.GetOrderByOrderId(orderval.ToInt());
//var textbox = RadAjaxPanel3.FindControl("textbox") as TextBox;
//textbox.Text = orderData.Remark;
(RadAjaxPanel3.FindControl("hdnOrderId") as HiddenField).Value = orderval;
pmsSrv.ResponseScript("OpenEditWindow()");
return;
}
}
Even 'Name' exists in the db the code cannot find it.
Any help is appreciated.
Thanks,
Kind Regards.
As far as I know
DataBinder.Eval()used to evaluate data-binding expression from object container, such likeContainer.DataItem. SinceSqlDataSourcedoesn't haveNameproperty, you can't use that for data binding withRadTreeNode.Instead, you need to use
Container.DataItemfor data binding purpose:Also don't forget to bind
RadTreeViewto the data source by settingDataSourceID,DataTextFieldandDataValueFieldlike example below:References for further reading:
RadTreeView - Binding to ASP.NET DataSource Components (Telerik Docs)
RadTreeView - Data Binding Overview (Telerik Docs)