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)