我正在使用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;
}
}
即使数据库中存在“名称”,代码也找不到它。
感谢您的帮助。
谢谢
亲切的问候。
答案 0 :(得分: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 - Binding to ASP.NET DataSource Components (Telerik Docs)