System.Web.HttpException: 'DataBinding:' System.Web.UI.WebControls.SqlDataSource 'не содержит свойства с именем' Name '.' - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю над проектом с 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 Ответ

0 голосов
/ 08 февраля 2019

Насколько я знаю, 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)

...