Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress 2

Автор: DumnedAspid
Дата сообщения: 20.12.2007 08:20
Dronton2
Благодарю! Все работает
Автор: X11
Дата сообщения: 20.12.2007 22:07
Есть код


Код:
for i := 0 to dbgReklama.DataController.RecordCount - 1 do begin
Автор: Sufferer
Дата сообщения: 20.12.2007 22:16
У меня пара практических вопросов по девкам.
1. Как в VerticalGrid при добавлении MultiEditor неотображать заголовок одного из едиторов?
2. Имеется в Multieditor два едитора типа LookupComboBox. Если программно добавить новый элемент в VerticalGrid в тот момент когда значение LookupComboBox в фокусе, то вылетит ошибка. Видимо это связано с неудачной попыткой записать недозволенное значение. Преодолеваю это пока насильственным прекидыванием фокуса на сам VerticalGrid. Может есть более правильный способ?
Автор: drunk2
Дата сообщения: 21.12.2007 07:09
X11
Копайте
Код: for i := 0 to dbgReklama.ViewInfo.VisibleRecordCount - 1 do begin...
...
dbgReklama.ViewInfo.VisibleItems
Автор: Shadi
Дата сообщения: 21.12.2007 07:38
X11


Как один из вариантов через выделение записей:


Код:
if GridViewPP.Controller.SelectedRowCount > 0 then
begin
for i:= 0 to GridViewPP.Controller.SelectedRowCount - 1 do
begin
GridViewPP.Controller.SelectedRows[i].Focused := True;
... бла-бла-бла...
end;
end;
end else
begin
MessageDlg('Нет выделенных записей', mtError, [mbOK], 0);
Exit;
end;

Автор: X11
Дата сообщения: 21.12.2007 08:49
1. зачем мне выделенные?
2. у ViewInfo нет VisibleItems

Добавлено:
а разве Items это строки? это ж колонки

Добавлено:
dbgReklama.ViewData.Rows[i].Visible
это оно?

Добавлено:
не проходит, вываливается ошибка list items out of bounds

Код:
for i := 0 to dbgReklama.DataController.RecordCount - 1 do
if dbgReklama.ViewData.Rows[i].Visible then
Автор: DumnedAspid
Дата сообщения: 21.12.2007 10:03
X11
Я так работал с видимыми записями:

Цитата:
with cxGrid1DBTableView1.ViewData do
begin
for i := 0 to RecordCount-1 do
begin
Records[i].Invalidate; // это просто для примера
end;


Добавлено:
X11

Цитата:
помоему обнаружил...

В этом примере ты используешь Rows вместо Records. Разницу между этими классами ты увидишь, когда начнешь группировать таблицу. Records ссылается на отфильтрованные записи, а Rows - на каждую строку в Гриде, в том числе и на группировочную
Автор: X11
Дата сообщения: 21.12.2007 11:38
DumnedAspid, спасибо!

Теперь вопрос такой (про группировку)

Перетаскиваю для группировки заголовок столбца, в столбце примерно такие записи


а вот, что после группирования


Грид берёт данные из TpFIBDataset, который в свою очередь тянет данные из хранимой процедуры базы данных FB 2.0.3.

Это глюк или какое-то свойство неверно настроено? Куда лезть? В какие свойства?
Автор: brookson
Дата сообщения: 21.12.2007 12:26
Доброго всем!

Вопрос такого вот плана. Используя Девки в проекте, состоящем из 30-ти форм, средне обремененных кодом, исполняемый файл получил размер 7 метров

И в памяти это работающее удовольствие занимает от 10 до 20 мег тоже. Это нормальное явление?

Хотелось бы уменьшить и то и другое, но длл-ки мне не нужны, поскольку проект работает сам по себе.
Автор: Dronton2
Дата сообщения: 21.12.2007 12:36
brookson
Нормальное явление.
Можешь отключить Skins.
Если таблицы большого объёма, используй в гридах DataController.DataModeController.GridMode := true;
Ну и вообще, все вычисления лучше проводить на сервере, а в клиент передавать итоговые данные.
Автор: brookson
Дата сообщения: 21.12.2007 12:46

Цитата:
brookson
Нормальное явление.
Можешь отключить Skins.
Если таблицы большого объёма, используй в гридах DataController.DataModeController.GridMode := true;
Ну и вообще, все вычисления лучше проводить на сервере, а в клиент передавать итоговые данные.    
Всего записей: 191 | Зарегистр. 27-06-2005 | Отправлено: 13:36 21-12-2007


Таблицы небольшие, данных немного. С вычислениями тоже вроде всё равномерно. Просто до этого проект не использовал Девки и был сравнительно "невесомым"
Автор: Czechoslovak
Дата сообщения: 21.12.2007 16:00
X11

Цитата:
сам грид отфильтрован, как пробежаться только по видимым записям?


Все гораздо проще
dbgReklama.Controller.GotoFirst
dbgReklama.Controller.GotoNext
dbgReklama.Controller.GotoPrev
dbgReklama.Controller.GotoLast
Автор: korobovmax
Дата сообщения: 21.12.2007 16:25
brookson, грид (шестой) с собой тащит прикладные библиотеки (Theme, Skins, Export), а также библиотеку редакторов (cxEditors), закладки (PageControl). В итоге выйдет пустой в плане функционала exe на 3,39 мегабайта. А если еще бары добавить...

Ничего не поделаешь. Попробуй сжать программой ASPack. Из 7 мб получится ~2,6.
Автор: brookson
Дата сообщения: 22.12.2007 16:46
Подскажите, а есть у DevExpress такой DBList, чтоб у него были, как у RX-a, Items и Values?
Хочу, чтоб пользователь видел удобочитаемое значение, а сохранялось в таблице в таком виде, какой мне нужен.

И еще: можно ли заставить cxLabel.Caption переносить в несколько строк? Пока не увидел такой возможности
Автор: shulum
Дата сообщения: 22.12.2007 19:17
brookson
Propertise -> WordWrap - как-то так
Автор: brookson
Дата сообщения: 22.12.2007 22:25
shulum

Да!! Спасибо, дружище! С лейблом всё вышло

А с List или DbList - никто не в курсе?
Автор: shulum
Дата сообщения: 23.12.2007 13:57
brookson

Не совсем понятно о чем ... но что-то подсказывает, что это аля "вертикальный грид", либо грид с использование CardView
Автор: Dronton2
Дата сообщения: 24.12.2007 14:32
brookson
TcxImageComboBox. При этом, картинки можно не задавать, а только указать Description и Values.
Автор: shulum
Дата сообщения: 24.12.2007 21:50
Никто не подскажет, как в dxBar при добавление итемов разделитель воткнуть?
речь идет о создании оных в realtime.
В дизайнере все до боли просто ...
Автор: Chukotka
Дата сообщения: 24.12.2007 22:58
shulum
Установи при создании BeginGroup := True;
Автор: Sufferer
Дата сообщения: 24.12.2007 23:29
Повторюсь вопросами.
1. Как в VerticalGrid при добавлении MultiEditor неотображать заголовок одного из едиторов?
2. Имеется в Multieditor два едитора типа LookupComboBox. Если программно добавить новый элемент в VerticalGrid в тот момент когда значение LookupComboBox в фокусе, то вылетит ошибка. Видимо это связано с неудачной попыткой записать недозволенное значение. Преодолеваю это пока насильственным прекидыванием фокуса на сам VerticalGrid. Может есть более правильный способ?

И новенький.
3. В LookupComboBox для датасета в ListSource вызываю метод Locate(...). Все находит, но только внутри списка (видно что выбран нужный элемент), а вот изменение отображаемого элемента не происходит. Как его заставить это сделать?
Автор: George_Lucky
Дата сообщения: 25.12.2007 06:11
Sufferer
1. В капшн вставь пробел

Добавлено:
Sufferer
2. Ключ замени с Integer на String
Автор: DumnedAspid
Дата сообщения: 25.12.2007 11:37
brookson

Цитата:
Подскажите, а есть у DevExpress такой DBList, чтоб у него были, как у RX-a, Items и Values?

Есть такой компонент - TcxPopupEdit. В нем ты можешь отобразить любой DE контрол, в том числе и грид. Покопайся в нем...
Автор: Chukotka
Дата сообщения: 25.12.2007 13:49
DumnedAspid

Цитата:
Есть такой компонент - TcxPopupEdit. В нем ты можешь отобразить любой DE контрол, в том числе и грид. Покопайся в нем...

А, простите, зачем, чтобы показать грид, его надо помещать в ...PopupEdit? Не проще ли использовать обычный DBGrid и сформировать данные либо выборкой (select Id, Name from Table) либо ручками. В гриде отображать и редактировать только Name.
Автор: zver
Дата сообщения: 25.12.2007 16:49
Возник такой вопрос: Можно ли в cxGride если строка состоит из двух строк(используются bands) не выводить вторую строку(подстроку), если все значения этой подстроки нулевые?
Высоту строки менять, как я понимаю, нельзя при использовании banded tables.
Автор: Sufferer
Дата сообщения: 25.12.2007 19:39

Цитата:
Sufferer
1. В капшн вставь пробел

Добавлено:
Sufferer
2. Ключ замени с Integer на String


1. Не понял, и каким таким замечательным образом у меня при Caption := ' '; исчезнет заголовок поля? Мне желательно вообще не отображать этот заголовок, даже в виде пустого прямоугольника, а желательно мне иметь один заголовок на 2 лукапа.
Сейчас у меня это выгдядит где-то так: |Заголовок1|Заголовок2| Лукап1|Лукап2|
а необходимо так: | Заголовок | Лукап1|Лукап2|
2. Не, так сложнее наверное получиться т.к. сейчас у меня динамически генерится строчка Лукапа и источник под него, а теперь еще и тип ключа менять.
Автор: DumnedAspid
Дата сообщения: 26.12.2007 07:56
Chukotka

Цитата:
А, простите, зачем, чтобы показать грид, его надо помещать в ...PopupEdit? Не проще ли использовать обычный DBGrid и сформировать данные либо выборкой (select Id, Name from Table) либо ручками. В гриде отображать и редактировать только Name.

А ты прав, PopupEdit необязательно здесь использовать, можно и так как ты говоришь.


Добавлено:
zver

Цитата:
Возник такой вопрос: Можно ли в cxGride если строка состоит из двух строк(используются bands) не выводить вторую строку(подстроку), если все значения этой подстроки нулевые?
Высоту строки менять, как я понимаю, нельзя при использовании banded tables.

У соответствующего TcxGridBandedTableView обрабатываешь событие OnDataChanged. Там проверяешь нужные тебе условия и делаешь подстроку невидимой, если надо.
Делается это примерно так:

cxGrid1BandedTableView1.Bands.Items[0].Columns[1].Visible := false;
Автор: infomSB
Дата сообщения: 26.12.2007 10:02
Sufferer
1. Помоему используя только атрибуты, т.е. не переписывая сами компоненты, так как вы говорите не сделать. Единственное что приходит в голову, это: сделать заголовок второго пустым и настроить чтобы сепаратор между заголовками был пустым. SeparatorKind = string, SepratorString = ' '.
3. По этому вопросу не понятно что вы конкретно делаете ? Метод Locate у ListSource на который настроен LookupComboBox не должен вызывать изменение текущего значения в комбобоксе. Необходимо само KeyValue значение и менять
Автор: Chukotka
Дата сообщения: 26.12.2007 11:08
DumnedAspid
Как это:

Цитата:
строка состоит из двух строк(используются bands) не выводить вторую строку

соотносится с этим:

Цитата:
cxGrid1BandedTableView1.Bands.Items[0].Columns[1].Visible := false

Автор: Sufferer
Дата сообщения: 26.12.2007 11:37

Цитата:
1. Помоему используя только атрибуты, т.е. не переписывая сами компоненты, так как вы говорите не сделать. Единственное что приходит в голову, это: сделать заголовок второго пустым и настроить чтобы сепаратор между заголовками был пустым. SeparatorKind = string, SepratorString = ' '.

Нехотелось бы лезть в исходный код, а так как вы советуете несколько коряво получается - я с этого начал. Меньше 20 пикселеей заголовок не сделать, да еще как-то непонятно синхронизируются ширина заголовка и его едитор.
А по третьему вопросу поясню. У меня динамически генерятся несколько мультиедиторов, в каждом по 2 лукапа. Типа: |Заголовок1|Заголовок2| Лукап1|Лукап2|
Лукапы заполняются из словаря, причем между собой они синхронизированы, т.е. изменение в лукап1 автоматически меняет содержимое лукап2. Все отлично работает.
Вносим полученные таким образом ключи из лукап1 и лукап2 в таблицу.
Проблема в обратной записи из этой таблицы этих ключей в лукапы. Я сейчас делаю так:
для первого лукапа:
Editor.DataController.LocateByKey(qSearch.FieldByName('DictID').AsInteger);
и для второго
Editor.DataController.LocateByKey(qSearch.FieldByName('DictValue').AsInteger);
Значения в лукапах правильно проставляются, открыв выпадающий список это видно, но при этом не происходит синхронизации с отображением элемента по этим ключам. Видимо элемент списка просто не получает фокуса. Теперь понятно?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

Предыдущая тема: Язык программирования на русском языке


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.