А по-понятней можно? А то я понимая твою задачу, так: TreeView, как стэйтлс объект, выполняющий удалённо запрашиваемые методы... Точнее я совершенно не понимаю твою задачу...
(с)(_SZ_)
Re[2]: Microsoft.Web.UI.WebControls.TreeView как webservice
Здравствуйте, SubZero2000, Вы писали:
SZ>Здравствуйте, hellraiser, Вы писали:
H>>если кому нежалко, плз поделитесь кодом hellraiser[сабака]fumogilev.gov.by
SZ>А по-понятней можно? А то я понимая твою задачу, так: TreeView, как стэйтлс объект, выполняющий удалённо запрашиваемые методы... Точнее я совершенно не понимаю твою задачу...
работает некий web сервис котрый первоначально подает данные для загрузки первого уровня дерва, потом кликаю на +, этот web сервис динамически подгружает ветки второго уровня для той ветки которую я раскрываю и т.д.
ну для больших объемов данных с большой вложенность целиком дерево грузится на клиерта долго, а так существует возможность подгружать ветки только те кторые клиент хочет
Re[3]: Microsoft.Web.UI.WebControls.TreeView как webservice
Здравствуйте, hellraiser, Вы писали:
H>работает некий web сервис котрый первоначально подает данные для загрузки первого уровня дерва, потом кликаю на +, этот web сервис динамически подгружает ветки второго уровня для той ветки которую я раскрываю и т.д. H>ну для больших объемов данных с большой вложенность целиком дерево грузится на клиерта долго, а так существует возможность подгружать ветки только те кторые клиент хочет
Что возвращает Web Service? DataSet?
(с)(_SZ_)
Re[4]: Microsoft.Web.UI.WebControls.TreeView как webservice
Здравствуйте, SubZero2000, Вы писали:
SZ>Здравствуйте, hellraiser, Вы писали:
H>>работает некий web сервис котрый первоначально подает данные для загрузки первого уровня дерва, потом кликаю на +, этот web сервис динамически подгружает ветки второго уровня для той ветки которую я раскрываю и т.д. H>>ну для больших объемов данных с большой вложенность целиком дерево грузится на клиерта долго, а так существует возможность подгружать ветки только те кторые клиент хочет
SZ>Что возвращает Web Service? DataSet?
что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает
Re[5]: Microsoft.Web.UI.WebControls.TreeView как webservice
Здравствуйте, hellraiser, Вы писали:
H>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает
То есть, веб сервиса ещё нет?
Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node (e — аргумент события, e.Node — путь строка к необходимому ноду), потом вытянуть из дерева по пути нужный нод и засунуть туда новые с полученными данными...
Я конечно понимаю, что это всё тебе не очень помогло , но "примерчик" получился бы немаленький...
(с)(_SZ_)
Re[6]: Microsoft.Web.UI.WebControls.TreeView как webservice
Здравствуйте, SubZero2000, Вы писали:
SZ>Здравствуйте, hellraiser, Вы писали:
H>>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает
SZ>То есть, веб сервиса ещё нет?
нет SZ>Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node (e — аргумент события, e.Node — путь строка к необходимому ноду), потом вытянуть из дерева по пути нужный нод и засунуть туда новые с полученными данными... SZ>Я конечно понимаю, что это всё тебе не очень помогло , но "примерчик" получился бы немаленький...
в целом, да. но мне примерчик не нужен, я могу и сам написать. но если уже кто-то подобное делал и если нежалко поделится кодом, то вот я прошу собсвенно — поделится кодом. нехочется заново изобретать впелосипед и приэтом еще раз становится на различные грабли при написании этой бадяги.
Re[6]: Microsoft.Web.UI.WebControls.TreeView как webservice
Здравствуйте, SubZero2000, Вы писали:
SZ>Здравствуйте, hellraiser, Вы писали:
H>>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает
SZ>То есть, веб сервиса ещё нет? SZ>Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node
если у ноды не подгружены дети, у нее не будет плюсика, а значит Expand ей не сделать....
типа шутка....
... << RSDN@Home 1.1.3 stable >>
Re[7]: Microsoft.Web.UI.WebControls.TreeView как webservice
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, SubZero2000, Вы писали:
SZ>>Здравствуйте, hellraiser, Вы писали:
H>>>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает
SZ>>То есть, веб сервиса ещё нет? SZ>>Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node
M>если у ноды не подгружены дети, у нее не будет плюсика, а значит Expand ей не сделать....
M>типа шутка....
не ну такие фитчи надо тоже предусмотреть и побороть, вот о чем я и говорю, не изобретать велик снова, наверняка уже сть у когото реализация
Re[7]: Microsoft.Web.UI.WebControls.TreeView как webservice
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, SubZero2000, Вы писали:
SZ>>Здравствуйте, hellraiser, Вы писали:
H>>>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает
SZ>>То есть, веб сервиса ещё нет? SZ>>Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node
M>если у ноды не подгружены дети, у нее не будет плюсика, а значит Expand ей не сделать....
Здравствуйте, hellraiser, Вы писали:
H>не ну такие фитчи надо тоже предусмотреть и побороть, вот о чем я и говорю, не изобретать велик снова, наверняка уже сть у когото реализация
НУ ВОТ, накидал я тебе за 10 минут примерчик:
Сервис:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
namespace Test_app
{
[Serializable]
public class NodeInfo
{
public string Text;
public string Data;
public bool checkbox;
public string Image;
public bool havechilds;
}
public class result
{
public NodeInfo[] nodes;
public string parentIndex;
}
/// <summary>
/// Summary description for Tree.
/// </summary>public class Tree : System.Web.Services.WebService
{
public Tree()
{
//CODEGEN: This call is required by the ASP.NET Web Services Designer
InitializeComponent();
}
#region Component Designer generated code
//Required by the Web Services Designer private IContainer components = null;
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>private void InitializeComponent()
{
}
/// <summary>
/// Clean up any resources being used.
/// </summary>protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
[WebMethod]
public result LoadNode(string NodeData, string NodeIndex)
{
//здесь по переданным параметрам формируем под-ноды, и отправляем их в зад
result res = new result();
NodeInfo node = new NodeInfo();
node.Text = "sub node";
node.havechilds = true;
node.Data = "some data";
node.Image = "images/download_win.gif";
res.nodes = new NodeInfo[]{node, node};
res.parentIndex = NodeIndex;
return res;
}
}
}
ASPX:
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls" %>
<%@ Page language="c#" Codebehind="TreeView.aspx.cs" AutoEventWireup="false" Inherits="Test_app.TreeView" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>TreeView</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name=vs_defaultClientScript content="JavaScript">
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
<script>
function expand ()
{
var Node = TreeView1.getTreeNode( event.treeNodeIndex );
var Childs= Node.getChildren();
//ТУТ ПРОВЕРЯЕМ НАДО ЛИ ГРУЗИТЬ НОДЫ, можно проверять по наличию детей, но мне такой способ нравится больше.
if( Childs.length == 1 && Childs[0].getAttribute("NodeData") == "do_load" )
init( Node.getAttribute("NodeData"), Node.getNodeIndex() )
}
function init( nodeData, nodeindex )
{
service.useService("Tree.asmx?WSDL","LoadNode");
iCallID = service.LoadNode.callService(mathResults, "LoadNode", nodeData, nodeindex );
}
function mathResults(result)
{
if(result.error)
{
return false;
}
else
{
var myobj= result.value;
var Node = TreeView1.getTreeNode( result.value.parentIndex );
if ( Node != null )
{
var Childs= Node.getChildren();
for (var i in Childs)
{
Childs[i].remove();
}
for( var i in result.value.nodes)
{
var newNode = TreeView1.createTreeNode();
newNode.setAttribute("text", result.value.nodes[i].Text);
newNode.setAttribute("NodeData", result.value.nodes[i].Data);
newNode.setAttribute("ImageUrl", result.value.nodes[i].Image);
if(result.value.nodes[i].havechilds)
{
var loadNode = TreeView1.createTreeNode();
loadNode.setAttribute("text", "(load childs)");
loadNode.setAttribute("NodeData", "do_load");
newNode.add(loadNode);
}
Node.add(newNode);
}
}
}
}
</script>
</HEAD>
<body >
<form id="Form1" method="post" runat="server"><iewc:TreeView id=TreeView1 runat="server">
<iewc:TreeNode ImageUrl="images/download_win.gif" Text="Root1">
<iewc:TreeNode NodeData="do_load" Text="(load childs)"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode ImageUrl="images/download_win.gif" Text="Root2">
<iewc:TreeNode NodeData="do_load" Text="(load childs)"></iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeView>
</form>
<div id="service" style="BEHAVIOR:url(webservice.htc)"></div>
<script>
TreeView1.onExpand = expand;
</script>
</body>
</HTML>
Здравствуйте, mogadanez, Вы писали:
H>>не ну такие фитчи надо тоже предусмотреть и побороть, вот о чем я и говорю, не изобретать велик снова, наверняка уже сть у когото реализация
M>НУ ВОТ, накидал я тебе за 10 минут примерчик:
эх ... а мне бы едит бокс заполняемый из вебсервиса =))))
Здравствуйте, Igor Sukhov, Вы писали:
IS>Здравствуйте, mogadanez, Вы писали:
H>>>не ну такие фитчи надо тоже предусмотреть и побороть, вот о чем я и говорю, не изобретать велик снова, наверняка уже сть у когото реализация
M>>НУ ВОТ, накидал я тебе за 10 минут примерчик:
IS>эх ... а мне бы едит бокс заполняемый из вебсервиса =))))
Здравствуйте, mogadanez, Вы писали:
<skiped>
вот пробую применить данный алгоритм, столкнулся с проблемой. когда неизвестно к-во дочерних нодов, как из них формировать массив NodeInfo[]? подскажите плз.
вот код LoadNode
public result LoadNode(string NodeData, string NodeIndex, string navigate_page)
{
result res = new result();
res.nodes = new NodeInfo[]; //как вот здесь инициализировать
SqlConnection _connection = new SqlConnection(((string)(configurationAppSettings.GetValue("main_sqlConnection_ru.ConnectionString", typeof(string)))));
SqlCommand _command = new SqlCommand(String.Format("select id, title, child, navigate_url from tree where root_node_id = {0} order by child desc, title", NodeData), _connection);
try
{
_command.Connection.Open();
SqlDataReader _reader = _command.ExecuteReader();
NodeInfo _node = new NodeInfo();
while(_reader.Read())
{
_node.Text = (string)_reader.GetSqlString(1);
_node.Data = _reader.GetSqlInt32(0).ToString();
_node.havechilds = (bool)_reader.GetSqlBoolean(2);
if(!navigate_page.Equals(""))
_node.URL = _reader.GetSqlString(3).IsNull ? String.Format("{0}?nid={1}", navigate_page, _reader.GetSqlInt32(0)) : (string)_reader.GetSqlString(3);
((IList)res.nodes).Add(_node); //и как вот здесь добавлять
}
_reader.Close();
}
finally
{
_command.Connection.Close();
_command.Dispose();
}
res.parentIndex = NodeIndex;
return res;
}
Здравствуйте, hellraiser, Вы писали:
сам разобрался вот решение, может я неправильно что сделал, поправьте тогда
пришлось добавить конструктор для класса NodeInfo
[Serializable]
public class NodeInfo
{
public string Text;
public string Data;
public string URL;
public bool havechilds;
public NodeInfo()
{
}
public NodeInfo(string text, string data, string url, bool _havechilds)
{
Text = text;
Data = data;
URL = url;
havechilds =_havechilds;
}
}
и дальше код метода
public result LoadNode(string NodeData, string navigate_page)
{
result res = new result();
ArrayList nodes = new ArrayList(); //вот инициализация коллекции
SqlConnection _connection = new SqlConnection(((string)(configurationAppSettings.GetValue("main_sqlConnection_ru.ConnectionString", typeof(string)))));
SqlCommand _command = new SqlCommand(String.Format("select id, title, child, navigate_url from tree where root_node_id = {0} order by child desc, title", NodeData), _connection);
try
{
_command.Connection.Open();
SqlDataReader _reader = _command.ExecuteReader();
while(_reader.Read())
{
nodes.Add(new NodeInfo((string)_reader.GetSqlString(1), _reader.GetSqlInt32(0).ToString(),
!navigate_page.Equals("") ? _reader.GetSqlString(3).IsNull ? String.Format("{0}?nid={1}", navigate_page, _reader.GetSqlInt32(0)) : (string)_reader.GetSqlString(3) : "", (bool)_reader.GetSqlBoolean(2))); //вот ее заполнение
}
_reader.Close();
}
finally
{
_command.Connection.Close();
_command.Dispose();
}
res.nodes = (NodeInfo[])nodes.ToArray(typeof(NodeInfo)); //вот ее приведение к типу
res.parentIndex = NodeData;
return res;
}