System.Web.HttpException: 'DataBinding: 'System.Web.UI.WebControls.SqlDataSource' does not contain a property with the name 'Name'.'

589 views Asked by At

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.

1

There are 1 answers

1
Tetsuya Yamamoto On

As far as I know DataBinder.Eval() used to evaluate data-binding expression from object container, such like Container.DataItem. Since SqlDataSource doesn't have Name property, you can't use that for data binding with RadTreeNode.

Instead, you need to use Container.DataItem for data binding purpose:

<%# DataBinder.Eval(Container.DataItem, "Name") %>

Also don't forget to bind RadTreeView to the data source by setting DataSourceID, DataTextField and DataValueField like example below:

<telerik:RadTreeView RenderMode="Lightweight" runat="server" ID="RadTreeView1"
                     EnableDragAndDrop="false"
                     DataSourceID="SqlDataSource1"
                     DataTextField="Name" 
                     DataValueField="Name" 
                     OnClientNodeDropping="onDropping" EnableDragAndDropBetweenNodes="false">
</telerik:RadTreeView>

References for further reading:

RadTreeView - Binding to ASP.NET DataSource Components (Telerik Docs)

RadTreeView - Data Binding Overview (Telerik Docs)