System.Web.HttpException: 'DataBinding: 'System.Web.UI.WebControls.SqlDataSource'не содержит свойства с именем'Name'.'

Я работаю над проектом с RadTreeView.

Я пытаюсь связать узлы с именами из БД.

Привязка данных выполняется при открытии панели примечаний (когда нажата кнопка "Примечание", поэтому ее нельзя использовать в Page_Load, поскольку загрузка страницы только для открытия главной страницы. Если я ошибаюсь, исправьте меня.

Однако я получаю сообщение об ошибке:

System.Web.HttpException: 'DataBinding:' System.Web.UI.WebControls.SqlDataSource 'не содержит свойства с именем'Name'.'

Пожалуйста, найдите мой сервер и код клиента, как показано ниже.

.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;
        }
      }

Даже "Имя" существует в БД, код не может его найти.

Любая помощь приветствуется.

Спасибо,

С уважением.

1 ответ

Насколько я знаю DataBinder.Eval() используется для оценки выражения привязки данных из контейнера объекта, такого как Container.DataItem, поскольку SqlDataSource не имеет Name свойство, вы не можете использовать это для привязки данных с RadTreeNode,

Вместо этого вам нужно использовать Container.DataItem для привязки данных:

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

Также не забудьте связать RadTreeView к источнику данных, установив DataSourceID, DataTextField а также DataValueField как пример ниже:

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

Рекомендации для дальнейшего чтения:

RadTreeView - привязка к компонентам источника данных ASP.NET (Telerik Docs)

RadTreeView - Обзор привязки данных (Telerik Docs)

Другие вопросы по тегам