System.Web.HttpException:'数据绑定:'System.Web.UI.WebControls.SqlDataSource'不包含名称为'Name'的属性。

时间:2019-02-08 05:30:53

标签: c# radtreeview

我正在使用RadTreeView进行项目。

我正在尝试使用来自数据库的名称来绑定节点。

打开备注面板时(单击“备注”时)完成了数据绑定,因此不在Page_Load中,因为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 :(得分:1)

据我所知DataBinder.Eval()用于评估对象容器中的数据绑定表达式,例如Container.DataItem。由于SqlDataSource不具有Name属性,因此不能将其用于与RadTreeNode的数据绑定。

相反,您需要使用Container.DataItem进行数据绑定:

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

同样不要忘记通过设置RadTreeViewDataSourceIDDataTextFieldDataValueField绑定到数据源,如下例所示:

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

参考文献供进一步阅读:

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

RadTreeView - Data Binding Overview (Telerik Docs)