Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проход по treeview, проход по treeview 
:(
    Опции темы
DEADLY
Дата 25.2.2010, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 23.8.2007

Репутация: 1
Всего: 1



при выделении элемента treeview срабатывает запрос отображающий некие данные
проблема при быстром перемещении по дереву кнопкой вниз или верх программа умирает , как сделать чтобы запрос срабатывал не моментально а например если елемент выделен больше секунды  smile 
PM MAIL   Вверх
Экскалупатор
Дата 25.2.2010, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



DEADLY, может проблемы в чем то другом? я много раз видел подобные решения и они всегда работали нормально. покажи обработчик события.
PM MAIL ICQ   Вверх
CYBERDREAM
Дата 25.2.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Может надо оптимизировать запрос данных, которые необходимо отобразить?
как вариант можно так
Код

using System;
using System.Windows.Forms;

namespace win
{
    public partial class Form1 : Form
    {
        readonly Timer _timer = new Timer { Interval = 3000 };
        public Form1()
        {
            InitializeComponent();
            _timer.Tick += TimerTick;
        }

        private void TreeView1AfterSelect(object sender, TreeViewEventArgs e)
        {
            _timer.Stop();
            _timer.Start();
            
        }

        void TimerTick(object sender, EventArgs e)
        {
            label1.Text = treeView1.SelectedNode.Text;
            _timer.Stop();
        }
    }
}


Это сообщение отредактировал(а) CYBERDREAM - 25.2.2010, 10:10


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
mrbrooks
Дата 25.2.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



подозреваю, что отображение данных в дереве происходит в основном потоке.
PM MAIL   Вверх
CYBERDREAM
Дата 25.2.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Думаю оптимально будет сделать как задержку на отображение, так и вывод в др. потоке


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
DEADLY
Дата 25.2.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 23.8.2007

Репутация: 1
Всего: 1



Цитата(mrbrooks @ 25.2.2010,  09:33)
подозреваю, что отображение данных в дереве происходит в основном потоке.

да в основном , но не думаю что отображение в отдельном потоке решит проблему
вот обработчик
Код

private void podstan_AfterSelect(object sender, TreeViewEventArgs e)
        {            
            OracleDataReader queryResult;
            LoraLib.OracleDb lora = new LoraLib.OracleDb(); ;
            lora.Connect("****", "****", "*********");
            queryResult = lora.Select("select date_crt,date_exp,date_ok,worker,note,objects,ouner,sostav from uit.work where name = '" + this.podstan.SelectedNode.Text + "'");
            if (queryResult.HasRows)
            {
                while (queryResult.Read())
                {
                    label4.Text = queryResult[6].ToString();
                    label6.Text = queryResult[0].ToString();
                    label7.Text = queryResult[1].ToString();
                    label15.Text = queryResult[2].ToString();
                    workers.Text = queryResult[3].ToString();
                    comment.Text = queryResult[4].ToString();
                    objects.Text = queryResult[5].ToString();
                    sostav.Text = queryResult[7].ToString();
                }
            }
        }

да и еще база oracle XE

Это сообщение отредактировал(а) DEADLY - 25.2.2010, 10:52
PM MAIL   Вверх
CYBERDREAM
Дата 25.2.2010, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



тогда думаю задержка подойдет.
Кстати, в коде наверное можно поменять 
Код

if (queryResult.HasRows)
{
     while (queryResult.Read())
     {



на 
Код

if (queryResult.HasRows && queryResult.Read())
{


А если записей немного, может их считать все из базы, и хешировать? а потом уже из хеша читать. И все быстрее отработает. Ибо соединение не больно быстро ведь работает как никак.

Это сообщение отредактировал(а) CYBERDREAM - 25.2.2010, 11:05


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
mrbrooks
Дата 25.2.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



DEADLY, это что  в цикле постоянно обновляются данные в контролах - в итоге в них окажется только последнее значение? это рационально? 

Цитата(DEADLY @  25.2.2010,  10:51 Найти цитируемый пост)
но не думаю что отображение в отдельном потоке решит проблему

судя по коду - это здравое решение. запись данных и их обновление забивают основной поток, до тех пор пока все данные не будут извлечены из queryResult. Если их там десятки тысяч - то тут кто угодно упадет.
PM MAIL   Вверх
DEADLY
Дата 25.2.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 23.8.2007

Репутация: 1
Всего: 1



Цитата(mrbrooks @ 25.2.2010,  11:13)
DEADLY, это что  в цикле постоянно обновляются данные в контролах - в итоге в них окажется только последнее значение? это рационально? 

Цитата(DEADLY @  25.2.2010,  10:51 Найти цитируемый пост)
но не думаю что отображение в отдельном потоке решит проблему

судя по коду - это здравое решение. запись данных и их обновление забивают основной поток, до тех пор пока все данные не будут извлечены из queryResult. Если их там десятки тысяч - то тут кто угодно упадет.

результат запроса всегда одна строка
идея отдельного потока мне не очень нравится, может есть способ задержки (т.е. если элемент выделент больше секунды например и тока потом выполнять запрос и вывод данных )

Это сообщение отредактировал(а) DEADLY - 25.2.2010, 12:19
PM MAIL   Вверх
CYBERDREAM
Дата 25.2.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



тогда нет смысла использовать while


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
mrbrooks
Дата 25.2.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



Цитата(DEADLY @  25.2.2010,  12:17 Найти цитируемый пост)
результат запроса всегда одна строка

если так - тогда действительно зачем while. Подвисает определенно из-за цикла. 
PM MAIL   Вверх
DEADLY
Дата 25.2.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 23.8.2007

Репутация: 1
Всего: 1



Цитата(mrbrooks @ 25.2.2010,  12:25)
Цитата(DEADLY @  25.2.2010,  12:17 Найти цитируемый пост)
результат запроса всегда одна строка

если так - тогда действительно зачем while. Подвисает определенно из-за цикла.

сделал без цикла проблема осталась
PM MAIL   Вверх
CYBERDREAM
Дата 25.2.2010, 12:41 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



while то быстро отработает, но сам пойми, Ты несколько раз в секунду меняешь узел, и каждый раз происходит соедение. Это не есть хорошо.
Так что захешируй либо сделай задержку (я же указал выше как)


Код

using System;
using System.Windows.Forms;

namespace win
{
    public partial class Form1 : Form
    {
        readonly Timer _timer = new Timer { Interval = 3000 };
        public Form1()
        {
            InitializeComponent();
            _timer.Tick += TimerTick;
        }

        private void podstanAfterSelect(object sender, TreeViewEventArgs e)
        {
            _timer.Stop();
            _timer.Start();
            
        }

        void TimerTick(object sender, EventArgs e)
        {
             _timer.Stop();

OracleDataReader queryResult;
            LoraLib.OracleDb lora = new LoraLib.OracleDb(); ;
            lora.Connect("****", "****", "*********");
            queryResult = lora.Select("select date_crt,date_exp,date_ok,worker,note,objects,ouner,sostav from uit.work where name = '" + this.podstan.SelectedNode.Text + "'");
            if (queryResult.HasRows)
            {
                while (queryResult.Read())
                {
                    label4.Text = queryResult[6].ToString();
                    label6.Text = queryResult[0].ToString();
                    label7.Text = queryResult[1].ToString();
                    label15.Text = queryResult[2].ToString();
                    workers.Text = queryResult[3].ToString();
                    comment.Text = queryResult[4].ToString();
                    objects.Text = queryResult[5].ToString();
                    sostav.Text = queryResult[7].ToString();
                }
            }
        }
    }
}


Это сообщение отредактировал(а) CYBERDREAM - 25.2.2010, 12:46


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
mrbrooks
Дата 25.2.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 7
Всего: 306



Цитата(CYBERDREAM @  25.2.2010,  12:41 Найти цитируемый пост)
Ты несколько раз в секунду меняешь узел, и каждый раз происходит соедение. Это не есть хорошо.


Верно. Возможно стоит просто блокировать TreeView пока предыдущее соединение не закроется.
PM MAIL   Вверх
CYBERDREAM
Дата 25.2.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Цитата(mrbrooks @ 25.2.2010,  13:32)
Цитата(CYBERDREAM @  25.2.2010,  12:41 Найти цитируемый пост)
Ты несколько раз в секунду меняешь узел, и каждый раз происходит соедение. Это не есть хорошо.


Верно. Возможно стоит просто блокировать TreeView пока предыдущее соединение не закроется.

Думаю в этом случае пользователю не понравится торможения при смене узла


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1337 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.