Hi,
I implemented a treeview using webservice in a web page and it worked ok. the treeview is simple as follows:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CategoryTreeView.aspx.cs" Inherits="iBOOKSTORE.CategoryTreeView" %>
<%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<telerik:RadTreeView ID="tvClass" runat="server" Height="400px" Width="500px"
Skin="Windows7" CheckBoxes="True" CheckChildNodes="True">
<WebServiceSettings Path="CategoryTreeView.aspx" Method="GetClassItems" />
</telerik:RadTreeView>
</div>
</form>
</body>
</html>
the webmethod "GetClassItems" worked fine.
but when I convert it into a usercontrol like the following:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserTreeView.ascx.cs" Inherits="iBOOKSTORE.UserTreeView" %><%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <div> <telerik:RadTreeView ID="tvClass" runat="server" Height="400px" Width="500px" Skin="Windows7" CheckBoxes="True" CheckChildNodes="True"> <WebServiceSettings Path="UserTreeView.ascx" Method="GetClassItems" /> </telerik:RadTreeView> </div>there is no difference between server side Methods. And I drag this usercontrol "UserTreeView.ascx" and drop it on a web page at the same directory. The treeview loaded ok by calling a server side function which returned a datatable. but when I click open a node, an error message popped up "GetClassItems Failed". I tried to set a break point in the WebMethod "GetClassItems", the execution never got inside. I suppose this must have something to do with the Path property. I purposely place the host page and usercontrol in the same directory, but no matter what I tried the same error occured. could you provide some advice please.
Thank you.
I send the server side code as well
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Drawing.Drawing2D;using System.Web.Services;using Telerik.Web.UI;using System.Web.UI.HtmlControls;namespace iBOOKSTORE{ public partial class UserTreeView : System.Web.UI.UserControl { static DataTech.AspNet.Data.dtAspNetDataSource ds = null; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { ds = new DataTech.AspNet.Data.dtAspNetDataSource(); LoadRootNodes(tvClass, TreeNodeExpandMode.WebService); } } private static void LoadRootNodes(RadTreeView treeView, TreeNodeExpandMode expandMode) { SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT DPTCODE,DPTNAME FROM DEPARTMENT WHERE LEFT(DPTCODE,1) <>'-' ORDER BY DPTCODE "; cmd.CommandTimeout = 0; DataTable data = GetData(cmd); foreach (DataRow row in data.Rows) { RadTreeNode node = new RadTreeNode(); node.Text = row["DPTNAME"].ToString(); node.Value = row["DPTCODE"].ToString(); node.ExpandMode = expandMode; treeView.Nodes.Add(node); } } private static DataTable GetData(SqlCommand sqlcmd) { return (ds.GetDataRows(sqlcmd, "", "", 0, int.MaxValue)); } private static DataTable GetChildNodes(string parentId) { SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT SUBSTRING(pc1.CLSCODE,1," + (parentId.Trim().Length + 1).ToString() + ") AS PCODE,pc1.PCODE,pc1.CLSCODE,pc1.CLSNAME,ISNULL(pc2.ChildrenCount, 0) as ChildrenCount FROM CLASS AS pc1 " + " LEFT JOIN ( SELECT PCODE, COUNT(*) AS ChildrenCount FROM CLASS GROUP BY PCODE) AS pc2" + " ON SUBSTRING(pc1.CLSCODE,1," + (parentId.Trim().Length + 1).ToString() + ")=pc2.PCODE WHERE pc1.PCODE='" + parentId.Trim() + "'"; cmd.CommandTimeout = 0; return GetData(cmd); } private void UpdateLoadingStatusPosition(TreeViewLoadingStatusPosition statusPosition) { tvClass.LoadingStatusPosition = statusPosition; } [WebMethod] public static RadTreeNodeData[] GetClassItems(RadTreeNodeData node) { DataTable data = GetChildNodes(node.Value); List<RadTreeNodeData> result = new List<RadTreeNodeData>(); foreach (DataRow row in data.Rows) { RadTreeNodeData childNode = new RadTreeNodeData(); childNode.Text = row["CLSNAME"].ToString(); childNode.Value = row["PCODE"].ToString(); if (Convert.ToInt32(row["ChildrenCount"]) > 0) { childNode.ExpandMode = TreeNodeExpandMode.WebService; } result.Add(childNode); } return result.ToArray(); } }}