Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress

Модерирует : ShIvADeSt

ShIvADeSt (29-01-2007 03:17): идем сюда
http://forum.ru-board.com/topic.cgi?forum=33&topic=7918
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

   

golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DevExpress

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:42 08-10-2003 | Исправлено: golkanavt, 15:41 08-09-2006
Alex47



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArtemiyUO
1. Вместо cxGrid1MasterView1 и cxGrid1DBTableView1 надо BandedView.
2. Почему нет типа TcxGridDBDataController ? Добавь в uses cxGridDBDataDefinitions.
3. Смысл всего кода в том, что сначала по строке (ARecord) на которой стоит фокус в MasterView находим DetailDataController и уже через него выполняем Controller.Scroll

Всего записей: 366 | Зарегистр. 20-03-2003 | Отправлено: 14:44 28-03-2006 | Исправлено: Alex47, 14:53 28-03-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все работает. Но я подумал что это не очень мне подходит. Так как надо определять направление и величину скрола а потом вызвать скролл с соотв параметрами.
Я думаю если можно как то достучаться до
TcxGridTableView, то я бы мог прочитать текущю позицию в мастер банде и проставить туже с помощью TcxGridTableView(ххх).LeftPos
но не знаю где взять TcxGridTableView
ну на край конечно реализую сам первым способом, но вижно сразу он кривой и там будет проблема с "большим скролом" с помощью нажатия на скролбар.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 18:25 28-03-2006
CyberSlon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите кто сталкивался с проблемой отображения русского языка в меню и диалогах при использовании DevExpress на Delphi7.
Имеется немецкий Windows с установленным русским языком. Русский язык есть и в почтовых клиентах и в офисных пакетах. Более того, в содержимом гридов он тоже отображается нормально. А вот в меню и заголовках бандов и колонок грида, равно как и в меню с тулбарами (ExpressBars), как и в заголовках групп и лейбов DXLayoutControla в диалогах вместо русских символов знаки вопроса. Везде в настройках DevExpress прописана раскладка RUSSIAN_CHARSET и True Type шрифт MS Sans Serif. Попытка копирования этого файла шрифтов с другой машины с английским Windows и стоящим русским MUI, на которой все отображается нормально, ни к чему не привела. Попытки менять шрифт меню Windows на MS Sans Serif также была безуспешной. Ковыряние реестра на предмет переключения кодовой страницы по умолчанию на 204 русскую для всех шрифтов тоже не помогает. Сталкивался ли кто с такой проблемой?

Всего записей: 2 | Зарегистр. 28-03-2006 | Отправлено: 19:56 28-03-2006
Alex47



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArtemiyUO
Ваша постановка задачи со скроллингом мне вообще не ясна.
Зачем скроллировать detail одновременно с master?
Общая ширина колонок в master и detail одинаковая?
 
Но если очень хочется, то, думается, можно сделать так:
 
1. В обработчике MasterView, срабатывающем при изменении LeftPos присваивать
    новое значение LeftPos для DetailView:
 
BandedViewGridLeftPosChanged(Sender: TObject);
var  
Index: Integer;  
ARecord: TcxCustomGridRecord;  
RelIndex: Integer;  
DetailDataController: TcxCustomDataController;  
 
begin  
 
 ARecord := BandedView.Controller.FocusedRecord;  
 Index := ARecord.RecordIndex;  
 RelIndex := ARecord.ViewData.DataController.  
               GetDetailActiveRelationIndex(Index);  
 DetailDataController := BandedView.DataController.GetDetailDataController(Index,RelIndex);  
 TcxGridTableController(TcxGridDBDataController(DetailDataController).Controller).LeftPos :=    
      BandedView.Controller.LeftPos * RelWidth;
...
здесь RelWidth- отношение ширин Detail и Master View.
Может потребуется добавить код для анализа величины BandedView.Controller.LeftPos, в зависимости
от которой что-либо делать или не делать.  
2. Код проверял на ExpressQuantumGrid 5\Demos\Delphi\MasterDetailDemo, работает.

Всего записей: 366 | Зарегистр. 20-03-2003 | Отправлено: 20:46 28-03-2006 | Исправлено: Alex47, 10:50 29-03-2006
Dennica



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
to ArtemiyUO
Попробуй использовать вместо TcxGrid  TdxMasterView. Он все скролирует так как тебе нужно, да и в принципе внем легче реализовать отображение мастер-детали. Я досихпор ломаю голову, для чего в принципе нужно было его создавать при наличии TcxGrid-а, но в некоторых случаях он действительно облегчает построение интерфейса, мож это твой случай.

Всего записей: 235 | Зарегистр. 19-12-2005 | Отправлено: 08:16 29-03-2006
vshersh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CyberSlon
Если Windows NT/2R/XP то попробуй в файле проекта до инициализации поставить
Код:
SetThreadLocale($419);

Если все чарсеты поставлены правильно (RUSSIAN_CHARSET) то будет отображаться нормально.  

Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 10:43 29-03-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все решил я свою задачу синхронного скролинга при мастер-таиле в схгриде.
Вот код
procedure TfPenders.BandedViewLeftPosChanged(Sender: TObject);
var
  ARecord              : TcxCustomGridRecord;
  DetailDataController : TcxCustomDataController;
  DetailTableView      : TcxGridTableView;
  Index, RelIndex      : Integer;
  ScM, ScD, i          : Integer;
begin
 scM := TcxGridTableView(BandedView).ViewInfo.DataWidth - TcxGridTableView(BandedView).ViewInfo.ScrollableAreaWidth;
 for i := 0 to BandedView.DataController.RecordCount - 1 do
 begin
   ARecord              := BandedView.ViewData.GetRecordByIndex(i);
   if not ARecord.Expanded then Continue;
   Index                := ARecord.RecordIndex;
   RelIndex             := ARecord.ViewData.DataController.GetDetailActiveRelationIndex(Index);
   DetailDataController := BandedView.DataController.GetDetailDataController(Index, RelIndex);
   DetailTableView      := TcxGridTableView(TcxGridDBDataController(DetailDataController).Controller.GridView);
   scD                  := DetailTableView.ViewInfo.DataWidth - DetailTableView.ViewInfo.ScrollableAreaWidth;
   DetailTableView.Controller.LeftPos := Round(TcxGridTableView(BandedView).Controller.LeftPos/(scM/scD));
 end;
end;
 
 
Код учитывает то что ширина столбцов может быть разная и скролирует в % отношении.
Работает помоему идеально.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 12:01 29-03-2006
Ky391



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
здравствуйте
с недавнего времени тоже работаю с ентими компонентами
возник вопрос:  
есть столбец с ссылками - надо их заменить на соответствующее строковое представление ( т.е. например в таблице в поле храниться id  записи в другой таблице например название продукта и дополнит. информация - надо отобразить вместо id название)
сейчас делаю это обработкой события onCustomCellDraw вроде
может есть другие возможности а то боюсь за производительность

Всего записей: 6 | Зарегистр. 29-03-2006 | Отправлено: 12:41 29-03-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну этож ужос) так не делается.  
А делается все на уровне СКЛ запросов, использую ОБЪЕДИНИЕ (join), примерно так
select t1.name, t2.type_name from table t1
left join table2 t2 on (t2.id = t1.type_id), где  
table это первая таблица (пусть будет главная) (в ней у нас хранятся какие то данные и ссылка на другую таблицу, у меня это поле t1.type_id, это поле ссылается на первичный ключ таблицы table2 - t2.id)
 
Т.е мы выбираем 2 поля из 2 таблиц а объеденяем их по условию  (t2.id = t1.type_id).
 
 
ЗЫ на эту тему написано море книг, очень рекомендую почитать.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 12:58 29-03-2006
Ky391



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
понял что дурак - исправлюсь)

Всего записей: 6 | Зарегистр. 29-03-2006 | Отправлено: 13:05 29-03-2006
gpi

Alone Wanderer
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ky391
Можно в свойстве столбца установить Properties=LookupComboBox и связать id с другой таблицей. Это вариант, чтобы меньше переделывать готовый код (на больших выборках будет некоторое замедление), а при написании нового лучше воспользоваться советом ArtemiyUO

Всего записей: 432 | Зарегистр. 30-05-2004 | Отправлено: 13:40 29-03-2006
Ky391



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
на уровне запроса к базе не есть хорошо - зачем в датасете хранить дополнительную совмещённую таблицу
а в селекте в датасете можно все енти жоины использовать?

Всего записей: 6 | Зарегистр. 29-03-2006 | Отправлено: 13:54 29-03-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ky391
Никаких совмещенных таблиц, все что выбрал, то и храниш а выбрал ты только то что тебе нужно.

Цитата:
а в селекте в датасете можно все енти жоины использовать?

вот этого я вообще не понял.
Именно в датасете и пишеш ЗАПРОС акак селект со всеми необходимыми джойнами.
Запрос выполняется сервером и возвращает тебе в датасет только то что сказано выбрать.
 

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 14:07 29-03-2006
golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть проблема следующего характера - у cxBandedTableView при MultiSelect = True выбираем первую строку из нужного диапазона, жмем shift, указываем последнюю строку диапазона - получили несколько выбранных строк. Теперь нужно по правому клику на диапазоне сделать определенное действие, НО! - при клике правой кнопкой выделенной становится только ОДНА! строка, над которой в этот момент находится курсор. Сталкивался кто с таким поведением?

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 14:55 29-03-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
специально проверил, у меня предпоследний девэкспресс, 5 грид, все работает без проблем - селект не изменяется после поап клика, глянь может свой-сва какие накрутил.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 15:01 29-03-2006
Ky391



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
мне нужно из базы выбирать все таблицы  никак их не модифицируя
так если я их все уже запихнул в датасет то зачем мне ещё и выборку качать из базы если у меня уже всё в памяти есть
как эту выборку сделать имея эти таблицы в датасете?
 
Добавлено:
хотя в принципе можно и выборку но придётся стока кода перелапатить
и как тогда базу апдейтить если в таблицу надо будет помещать всё равно id
 
и насчёт lookup repository как то у меня не получилось?
в lookupedit выставлял valuemember и displaymember - назначил его на столбец и в нём fieldname  - сделал по интуиции но по ходу надо не так;  а как?

Всего записей: 6 | Зарегистр. 29-03-2006 | Отправлено: 11:27 30-03-2006
golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ky391

Цитата:
так если я их все уже запихнул в датасет то зачем мне ещё и выборку качать из базы если у меня уже всё в памяти есть  
как эту выборку сделать имея эти таблицы в датасете?  

что значит "запихнул в датасет"? каким образом?
 
Добавлено:
меня грызут подозрения, что у вас просто таки огромный пробел в знаниях по организации работы с БД из win-приложения
 
Добавлено:
ArtemiyUO
все понял, в чем были грабли - раньше у девкоского грида не было свойства PopupMenu и попап приходилось прикручивать ручками в коде, это и стало причиной такого неадекватного поведения после перехода на более поздние версии

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 13:19 30-03-2006
Ky391



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
что значит "запихнул в датасет"? каким образом?

есть типизированный датасет, есть база в сети - коннектюсь, заполняю датасет информацией из базы
у меня уже завёрнуто всё на имеющуюся структуру датасета (такая же как у базы)
поэтому никакие запросы с объеденением не подходят  -  зачем лишний раз дёргать сервер если уже всё что надо забрал?
т.е. надо осуществить объеденеие локально - в принципе подозреваю как но больно по чёрному получается  -  вот и спрашиваю может есть какие наработки или автомат в этом плане?

Всего записей: 6 | Зарегистр. 29-03-2006 | Отправлено: 13:39 30-03-2006
gpi

Alone Wanderer
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ky391

Цитата:
и насчёт lookup repository как то у меня не получилось?  
в lookupedit выставлял valuemember и displaymember - назначил его на столбец и в нём fieldname  - сделал по интуиции но по ходу надо не так;  а как?

У столбца View, который отображает ID датасета выставляешь Properties=LookupComboBox
Properties.ListSource=датасет (Dataset2), с которым нужно связать данные из текущего датасета (Dataset1)
Properties.KeyFieldNames=ключевое поле из Dataset2
Properties.ListFieldNamed=поле из Dataset2, которое будет выводиться вместо ID
 

Всего записей: 432 | Зарегистр. 30-05-2004 | Отправлено: 14:01 30-03-2006
golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
есть типизированный датасет, есть база в сети - коннектюсь, заполняю датасет информацией из базы  
у меня уже завёрнуто всё на имеющуюся структуру датасета (такая же как у базы)  
поэтому никакие запросы с объеденением не подходят  -  зачем лишний раз дёргать сервер если уже всё что надо забрал?

базе пофиг (относительно сложности запроса конечно) что вы от нее требуете, "чистую" таблицу или же джойн нескольких таблиц - в любом случае вы получаете тот объем данных который запланировали, никаких "лишних дерганий" не будет. Если по сути задачи вам необходимо редактировать поля таблицы с возможностью выборки значений из справочных таблиц - тогда да, просто выбираете данные из таблицы и на уровне приложения/грида делаете лукап-поля с выборкой данных из соответствующих справочников. Подозревать никого не надо, надо просто сделать: Columns->Properties->LookupComboBox: ListSource - набор справочных данных, KeyFieldNames - ключевые поля таблицы-справочника, ListColumns, ListFieldNames - отвечает за поля выбираемые из справочника и отображаемые в итоговом гриде
 
Добавлено:
gpi
извиняюсь, не увидел ваш пост, продублировал ту же информацию

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 14:36 30-03-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress
ShIvADeSt (29-01-2007 03:17): идем сюда
http://forum.ru-board.com/topic.cgi?forum=33&topic=7918


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru