Microsoft.Web.UI.WebControls.TreeView как webservice
От: hellraiser Беларусь  
Дата: 25.06.04 10:37
Оценка:
если кому нежалко, плз поделитесь кодом hellraiser[сабака]fumogilev.gov.by
Re: Microsoft.Web.UI.WebControls.TreeView как webservice
От: SubZero2000 Украина  
Дата: 25.06.04 11:29
Оценка:
Здравствуйте, hellraiser, Вы писали:

H>если кому нежалко, плз поделитесь кодом hellraiser[сабака]fumogilev.gov.by


А по-понятней можно? А то я понимая твою задачу, так: TreeView, как стэйтлс объект, выполняющий удалённо запрашиваемые методы... Точнее я совершенно не понимаю твою задачу...
(с)(_SZ_)
Re[2]: Microsoft.Web.UI.WebControls.TreeView как webservice
От: hellraiser Беларусь  
Дата: 25.06.04 11:47
Оценка:
Здравствуйте, SubZero2000, Вы писали:

SZ>Здравствуйте, hellraiser, Вы писали:


H>>если кому нежалко, плз поделитесь кодом hellraiser[сабака]fumogilev.gov.by


SZ>А по-понятней можно? А то я понимая твою задачу, так: TreeView, как стэйтлс объект, выполняющий удалённо запрашиваемые методы... Точнее я совершенно не понимаю твою задачу...

работает некий web сервис котрый первоначально подает данные для загрузки первого уровня дерва, потом кликаю на +, этот web сервис динамически подгружает ветки второго уровня для той ветки которую я раскрываю и т.д.
ну для больших объемов данных с большой вложенность целиком дерево грузится на клиерта долго, а так существует возможность подгружать ветки только те кторые клиент хочет
Re[3]: Microsoft.Web.UI.WebControls.TreeView как webservice
От: SubZero2000 Украина  
Дата: 25.06.04 12:03
Оценка:
Здравствуйте, hellraiser, Вы писали:

H>работает некий web сервис котрый первоначально подает данные для загрузки первого уровня дерва, потом кликаю на +, этот web сервис динамически подгружает ветки второго уровня для той ветки которую я раскрываю и т.д.

H>ну для больших объемов данных с большой вложенность целиком дерево грузится на клиерта долго, а так существует возможность подгружать ветки только те кторые клиент хочет

Что возвращает Web Service? DataSet?
(с)(_SZ_)
Re[4]: Microsoft.Web.UI.WebControls.TreeView как webservice
От: hellraiser Беларусь  
Дата: 25.06.04 12:10
Оценка:
Здравствуйте, SubZero2000, Вы писали:

SZ>Здравствуйте, hellraiser, Вы писали:


H>>работает некий web сервис котрый первоначально подает данные для загрузки первого уровня дерва, потом кликаю на +, этот web сервис динамически подгружает ветки второго уровня для той ветки которую я раскрываю и т.д.

H>>ну для больших объемов данных с большой вложенность целиком дерево грузится на клиерта долго, а так существует возможность подгружать ветки только те кторые клиент хочет

SZ>Что возвращает Web Service? DataSet?

что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает
Re[5]: Microsoft.Web.UI.WebControls.TreeView как webservice
От: SubZero2000 Украина  
Дата: 25.06.04 12:33
Оценка:
Здравствуйте, hellraiser, Вы писали:

H>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает


То есть, веб сервиса ещё нет?
Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node (e — аргумент события, e.Node — путь строка к необходимому ноду), потом вытянуть из дерева по пути нужный нод и засунуть туда новые с полученными данными...
Я конечно понимаю, что это всё тебе не очень помогло , но "примерчик" получился бы немаленький...
(с)(_SZ_)
Re[6]: Microsoft.Web.UI.WebControls.TreeView как webservice
От: hellraiser Беларусь  
Дата: 25.06.04 12:45
Оценка:
Здравствуйте, SubZero2000, Вы писали:

SZ>Здравствуйте, hellraiser, Вы писали:


H>>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает


SZ>То есть, веб сервиса ещё нет?

нет
SZ>Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node (e — аргумент события, e.Node — путь строка к необходимому ноду), потом вытянуть из дерева по пути нужный нод и засунуть туда новые с полученными данными...
SZ>Я конечно понимаю, что это всё тебе не очень помогло , но "примерчик" получился бы немаленький...
в целом, да. но мне примерчик не нужен, я могу и сам написать. но если уже кто-то подобное делал и если нежалко поделится кодом, то вот я прошу собсвенно — поделится кодом. нехочется заново изобретать впелосипед и приэтом еще раз становится на различные грабли при написании этой бадяги.
Re[6]: Microsoft.Web.UI.WebControls.TreeView как webservice
От: mogadanez Чехия  
Дата: 25.06.04 12:47
Оценка:
Здравствуйте, 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
От: hellraiser Беларусь  
Дата: 25.06.04 13:01
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>Здравствуйте, SubZero2000, Вы писали:


SZ>>Здравствуйте, hellraiser, Вы писали:


H>>>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает


SZ>>То есть, веб сервиса ещё нет?

SZ>>Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node

M>если у ноды не подгружены дети, у нее не будет плюсика, а значит Expand ей не сделать....



M>типа шутка....

не ну такие фитчи надо тоже предусмотреть и побороть, вот о чем я и говорю, не изобретать велик снова, наверняка уже сть у когото реализация
Re[7]: Microsoft.Web.UI.WebControls.TreeView как webservice
От: SubZero2000 Украина  
Дата: 25.06.04 13:14
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>Здравствуйте, SubZero2000, Вы писали:


SZ>>Здравствуйте, hellraiser, Вы писали:


H>>>что возвращает, незнаю, скорее всего должен возвращать xml в определенной форме, хотя по сути он ег и так возвращает


SZ>>То есть, веб сервиса ещё нет?

SZ>>Тебе нужно создать веб сервис, написать в нём метод который будет возвращать все необходимые подноды, в удобном тебе формате, потом создать веб референс на клиенте и в обработчике события дерева Expand обращаться к веб сервису и получить подноды для e.Node

M>если у ноды не подгружены дети, у нее не будет плюсика, а значит Expand ей не сделать....



M>типа шутка....


А
theTreeNode.Expandable = true
поможет отцу русской демократии?
(с)(_SZ_)
ПРИМЕР
От: mogadanez Чехия  
Дата: 25.06.04 13:43
Оценка: 78 (5)
Здравствуйте, 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>
... << RSDN@Home 1.1.3 stable >>
Re: ПРИМЕР
От: mogadanez Чехия  
Дата: 25.06.04 13:47
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>Здравствуйте, hellraiser, Вы писали:


заценить работу можно здесь
... << RSDN@Home 1.1.3 stable >>
Re: ПРИМЕР
От: SubZero2000 Украина  
Дата: 25.06.04 14:46
Оценка:
Здравствуйте, mogadanez, Вы писали:

M> Skipped...


Что я могу сказать? Просто супер. Я через behavior webservice ещё не заполнял дерево .
(с)(_SZ_)
Re: ПРИМЕР
От: Igor Sukhov  
Дата: 25.06.04 14:57
Оценка:
Здравствуйте, mogadanez, Вы писали:

H>>не ну такие фитчи надо тоже предусмотреть и побороть, вот о чем я и говорю, не изобретать велик снова, наверняка уже сть у когото реализация


M>НУ ВОТ, накидал я тебе за 10 минут примерчик:


эх ... а мне бы едит бокс заполняемый из вебсервиса =))))
* thriving in a production environment *
Re[2]: ПРИМЕР
От: mogadanez Чехия  
Дата: 25.06.04 14:58
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>Здравствуйте, mogadanez, Вы писали:


H>>>не ну такие фитчи надо тоже предусмотреть и побороть, вот о чем я и говорю, не изобретать велик снова, наверняка уже сть у когото реализация


M>>НУ ВОТ, накидал я тебе за 10 минут примерчик:


IS>эх ... а мне бы едит бокс заполняемый из вебсервиса =))))


как два пальца...
... << RSDN@Home 1.1.3 stable >>
Re[3]: ПРИМЕР
От: Igor Sukhov  
Дата: 25.06.04 15:00
Оценка:
Здравствуйте, mogadanez, Вы писали:

IS>>эх ... а мне бы едит бокс заполняемый из вебсервиса =))))

M>как два пальца...

не — я передумал, а вот если editbox как вебсервис ? =)))
* thriving in a production environment *
Re: ПРИМЕР
От: hellraiser Беларусь  
Дата: 28.06.04 07:52
Оценка:
Здравствуйте, 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;
        }
Re[2]: ПРИМЕР
От: hellraiser Беларусь  
Дата: 28.06.04 08:27
Оценка:
Здравствуйте, 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;
        }
Re: ПРИМЕР
От: hellraiser Беларусь  
Дата: 28.06.04 11:32
Оценка:
Здравствуйте, mogadanez, Вы писали:

<skiped>

     <div id="service" style="BEHAVIOR:url(webservice.htc)"></div>

вот что где этот файл поведения должен лежать и откуда его взять можно
Re[2]: ПРИМЕР
От: mogadanez Чехия  
Дата: 28.06.04 11:40
Оценка:
Здравствуйте, hellraiser, Вы писали:

H>Здравствуйте, mogadanez, Вы писали:


H><skiped>

H>

H>     <div id="service" style="BEHAVIOR:url(webservice.htc)"></div>

H>

H>вот что где этот файл поведения должен лежать и откуда его взять можно

у меня в примере он лежеит там же где и страница.

взять его можно у микрософта.
здесь
... << RSDN@Home 1.1.3 stable >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.