Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с GUI  (Прочитано 14551 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Serega
Гость
« : 07-09-2004 12:43 » new

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

Когда пытаюсь эту табличку с помощью DataGrid прога либо зависает либо вылезает SEHException, в дебаге глянул, похоже проблема в SetScrollSizes

Как с этим бороться ?
может кто сталкивался
Записан
DM
Гость
« Ответ #1 : 07-09-2004 13:08 » 

А что требуется? Так же ежесекундно высвечивать новые строчки в гриде?
Может быть достаточно один раз заполнить грид селектом, а обновлять время от времени ?
Записан
Serega
Гость
« Ответ #2 : 07-09-2004 13:10 » 

Программа собирает данные типа в реальном времени и должна отображать их пользователю
Записан
Serega
Гость
« Ответ #3 : 07-09-2004 13:14 » 

И еще вопрос
У меня есть несколько таблиц в DataSet, как выполнить запрос на выборку из этих табличек ?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 07-09-2004 15:58 » 

2) нет такой функции. Нужно связать таблицы и по строчке master-таблицы выуживать строчки detail-таблиц. Только так. Эта задача должна решаться на стороне СУБД, а не на клиенте. Ну или идти по связям, последовательно выполняя метод Select для каждой таблицы. Пробовал Select к DataSet применить - что-то тогда у меня не заработало, либо нельзя его к DataSet применять...

1) Виснет он потому, что при столь частом добавлении таблица постоянно залочена сервером. Это даже класс исключения подтверждает - ошибка вне проги. Что делать в данном случае...
а) можно создать хранимую процедуру или представление на таблицу и поручить разруливать операции добавления в таблицу и обновления представления СУБД (не уверен, пройдёт ли такой номер). Кстати, записи из таблицы удаляются с такой же скоростью? Иначе буквально через пару часов работы машина умрёт смертью храбрых в попытках обработать твои данные.
б) (развитие а) можно создать 2 таблицы, где в одну идет добавление со страшной скоростью, а во вторую копируются данные большими блоками и значительно реже (скажем, раз в 10-30 секунд), тогда DataGrid ассоциировать со второй таблицей, а синхронизацию поручить хранимой процедуре, которую пускать по таймеру. Можно сделать представление, которое обновляется по таймеру тоже значительно реже, чем главная таблица. (По сути, DM это же самое предложил)

И вообще, не много ли хочешь от DataGird? Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Serega
Гость
« Ответ #5 : 07-09-2004 18:57 » 

Нет никакого сервера, я все в памяти храню, пока не нужно сохранять информацию между запусками

Может для DataGrid это действително много, только я нигде не видел описания ограничений для нее
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 07-09-2004 19:02 » 

надо полагать, что добавление данных и GUI у тебя в разных потоках. А блокировки нормально работают?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Serega
Гость
« Ответ #7 : 08-09-2004 05:31 » 

А я откуда знаю, не я же писал ADO.NET и DataGrid
Записан
DM
Гость
« Ответ #8 : 08-09-2004 07:20 » 

Похоже, в этом то и проблема - в блокировках при добавлении данных из другого потока. Прогнал простенький пример, где добавление данных происходит из отдельного потока - тоже непонятные исключения происходят.
Причем только если в процессе добавления попытаться грид руками прокрутить или на другую строку с спозиционироваться. А когда  все в одно потоке - работает хорошо.
Видимо, копать надо блокировки. И подумать как обновлять данные не столь часто, а раз в секунды 3, например. Пользователю и не надо чаще, как правило. Это ведь не мультфильм.
Записан
DM
Гость
« Ответ #9 : 08-09-2004 07:56 » 

По поводу выборки из нескольких таблиц в одном DataSet. Вопрос немного непонятен: Если таблички уже с данными, то речь, видимо, идет о высветке этих таблиц в гриде - надо указать отношения между таблицами с помощью System.Data.DataRelation, после чего можно будет перемещаться по табличкам.  Если же надо заполнить DataSet c несколькими DataTable, то заполняются они обычным образом, по отдельности - из БД с помощью DataAdapter, метод Fill, или, без БД, вручную: DataTable.Rows.Add(DataRow).
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines