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

» Использование DevExpress (часть 3)

Автор: f3ka
Дата сообщения: 21.12.2009 13:24
OwnerZ
надо подождать пока ребята из DevExpress сделают этот функционал...
Автор: fortezza
Дата сообщения: 21.12.2009 13:26
подключаю cxLookUpCoomboBox в колонке cxGrid-а, как сделать так чтобы первый не раскрывался при клике?
Автор: vladman
Дата сообщения: 21.12.2009 15:21
AvGSoft

Цитата:
Народ, есть такой вопрос: каким образом можно выдернуть цвета элементов TdxBar к которому применен скин.

Можно попробовать так:

Код: uses
dxSkinsLookAndFeelPainter;
...
var
vPainter: TcxCustomLookAndFeelPainterClass;
vPainterInfo: TdxSkinLookAndFeelPainterInfo;
begin
if GetExtendedStylePainters().GetPainterByName(dxSkinController1.SkinName, vPainter) then
begin
GetExtendedStylePainters().GetPainterData(vPainter, vPainterInfo);
<YourColor> := vPainterInfo.Skin.GetGroupByName('Bars').GetElementByName('Bar').Color;
end;
end;
Автор: AvGSoft
Дата сообщения: 21.12.2009 15:46
vladman
Да дествительно, код
Цитата:
Color = ASkin->GetGroupByName("Bars")->GetElementByName("ContentColor")->Color;
не работает, мой косяк. Но проблема в том, что некоторые элементы в скине представлены в виде image'ев и цвет для них установлен либо в clDefault, либо clNone и истинный цвет не удается получить
Автор: vladman
Дата сообщения: 21.12.2009 16:21
AvGSoft

Цитата:
Но проблема в том, что некоторые элементы в скине представлены в виде image'ев и цвет для них установлен либо в clDefault, либо clNone и истинный цвет не удается получить

Так и есть.
Ribbon form caption bitmap or color
Автор: fortezza
Дата сообщения: 22.12.2009 07:07
vladman, не раскрывался вообще
Автор: vladman
Дата сообщения: 22.12.2009 09:24
fortezza

Цитата:
не раскрывался вообще

Установите у этого поля свойство Options.Edititng = false;
Автор: baxram
Дата сообщения: 22.12.2009 12:17
Уважаемые форумчане! Помогите разобраться с проблемкой...
Печать любого контрола с использованием компонента TdxComponentPrinter в рантайме заканчивается ошибкой принтера ("Printer has encountered error"), в то же время на другом принтере печать идет без проблем. Печать из других программ на "проблемном" принтере никаких трудностей не встречает. Но что самое интересное - печать из того же TdxComponentPrinter на том же принтере В ДИЗАЙНТАЙМЕ проходит также без проблем!

Может, кто сталкивался с подобной проблемой, или есть хотя бы идеи, как отследить различия рантайма и дизайнтайма в данной ситуации, или как сымитировать дизайнтайм в рантайме... буду признателен за любую помощь.
Заранее спасибо.

P.S. На всякий случай: использую D7, "проблемный" принтер - HP Color LaserJet 2600n, второй - Kyocera 3050
Автор: SIgor33
Дата сообщения: 22.12.2009 15:16
Подскажите как сделать поиск части слова в cxgrid не прибегая к фильтрации или изменении параметров запроса?
например введя "иво" бегунок должен спозиционироваться на первое слово в столбце начинающееся на "иво" или на слове которое содержит в себе "иво".
Автор: f3ka
Дата сообщения: 22.12.2009 15:36
SIgor33
ответ в словах Incremental Search, помоему находиться в TcxTableView.OptionBehaviors ...
Автор: X11
Дата сообщения: 22.12.2009 15:47
f3ka, я так понял, что ему нужно Incremental Search, только не с начала слова, а поиск по части слова.

Вопрос по суммированию и фильтрации.


Как правильно бы сделать так, чтобы в гриде отобразить записи только у которых COUNT > какого-либо числа?

Добавлено:
В частности где count > 1
Автор: f3ka
Дата сообщения: 22.12.2009 15:54
X11

Цитата:
например введя "иво" бегунок должен спозиционироваться на первое слово в столбце начинающееся на "иво" или на слове которое содержит в себе "иво"

а для вхождения надо обрабатывать напильником
Автор: X11
Дата сообщения: 22.12.2009 16:16

Цитата:
а для вхождения надо обрабатывать напильником

да, бы сделал на уровне SQL + Locate
1. Ищем ID записи
select id from table1 where pole1 like %строка_поиска%
(выполнят запрос следует с некоторой задержкой между нажатиями клавиш, чтобы дать пользователю время набрать полностью желаемое сочетание символов, желательно задержку сделать настраиваемой)

Позиционируем
2. DataSet.locate('ID', ID, []);
Автор: kii
Дата сообщения: 22.12.2009 16:22
Есть вопрос
Предположем, что есть отфильтрованный набор данных в QGrid 6
-> можно ли этот набор вывести в отчет с помощью fast-report ... и КАК?
Автор: X11
Дата сообщения: 22.12.2009 16:46
kii такой же вопрос я задавал в разделе по FastReport
FastReport
Но ответа не дали
Автор: vladman
Дата сообщения: 22.12.2009 19:41
baxram

Цитата:
P.S. На всякий случай: использую D7, "проблемный" принтер - HP Color LaserJet 2600n, второй - Kyocera 3050

Какая версия DevExpress? Как-то был случай что на конкретном принтере в какой-то версии что-то подобное выскакивало. Обновление решило проблему.

Добавлено:
SIgor33

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

Если с поиском в начале слова/фразы не возникает трудностей (используйте, как вам уже советовал f3ka, Incremental Search), то с поиском искомой подстроки внутри слова/фразы придется повозиться. Некий Tony Wood даже предлагал DevExpress свое решение. Подробнее: Suggestion: Add ability to perform IncSearch using the entire cell text (not only the beginning of text)


Добавлено:
X11

Цитата:
Как правильно бы сделать так, чтобы в гриде отобразить записи только у которых COUNT > какого-либо числа? В частности где count > 1

По-моему уже как-то обсуждали эту проблему. На данный момент средствами QuantumGrid решить подобную задачу, опять же по-моему, не представляется возможным. Именно ваш случай уже обсуждался в саппорте DevExpress: Filter grid based on group summary value
Автор: vladman
Дата сообщения: 22.12.2009 22:10
kii

Цитата:
Предположем, что есть отфильтрованный набор данных в QGrid 6
-> можно ли этот набор вывести в отчет с помощью fast-report ... и КАК?

Можно. Как - см. ниже.
X11

Цитата:
такой же вопрос я задавал в разделе по FastReport. Но ответа не дали ... короче как бы ректально получается...

Ну почему ректально, вполне даже работоспособно и несложно. Например:

Код: var
i, j: Integer;
begin
<YourdxMemData>.CreateFieldsFromDataSet(<YourcxGridDBTableViewSource>.DataController.DataSource.DataSet);
<YourdxMemData>.Active := True;
for i := 0 to <YourcxGridDBTableViewSource>.DataController.FilteredRecordCount - 1 do
begin
<YourdxMemData>.Append;
for j := 0 to <YourcxGridDBTableViewSource>.ColumnCount - 1 do
<YourdxMemData>.FieldByName(<YourcxGridDBTableViewSource>.Columns[j].DataBinding.FieldName).Value :=
<YourcxGridDBTableViewSource>.DataController.Values[<YourcxGridDBTableViewSource>.DataController.FilteredRecordIndex[i], j];
<YourdxMemData>.Post;
end;
end;
Автор: afiget
Дата сообщения: 22.12.2009 22:16
f3ka
Он хочет, чтобы не только по началу слова искать.

SIgor33
Насколько я помню, такой поиск может быть реализован только самостоятельно.
Нужно пробежаться циклом по записям и сделать поиск по строке. Что-то типа такого:

Код:
for i := 0 to View1.ViewData.RecordCount - 1 do
begin
where:=View1.ViewData.Records[i].DisplayTexts[View1MyColumn.Index];
// DisplayTexts нужно брать, чтобы поиск шел по отображаемым значениям лукапов, например
// дальше ищите в where
end;
Автор: kii
Дата сообщения: 23.12.2009 07:28
vladman
Премного благодарен !
Нечто подобное я и преполагал, но хотелось бы на прямую без промежуточного DataSet.
Автор: SIgor33
Дата сообщения: 23.12.2009 08:23
спасибо всем за советы.
Насчет поиска по началу слова у меня не возникало проблем.
Я думал можно не изпользуя sql все сделать. Я то использовал при нажатие клавиши динамически менял sql запрос.
Автор: f3ka
Дата сообщения: 23.12.2009 09:17
afiget
мое сообщение внимательно прочитано? для поиска по началу строки достаточно Incremental Search, а далее мои слова

Цитата:
для вхождения надо обрабатывать напильником

не надо дважды повторять, что поиск не только по началу строки...
Автор: baxram
Дата сообщения: 23.12.2009 09:25
vladman

Цитата:
Какая версия DevExpress?

v42. Считаете, нужно обновить до более свежей?
Автор: fortezza
Дата сообщения: 23.12.2009 09:31
Нужно чтобы при выборе поля в cxDBLookUpComboBox1 в cxGrid1 отображались определенные данные
пример.
есть таблицы:

table
id    name        id_group
1    яблоко        1
2    помидор    2
3    малина        3
4    груша        1
5    кортошка    2

table_gr
id    gr_name
1    фрукт
2    овощ
3    ягода

Соответственно ZQuery1, DS1,
ZQuery1.SQL.Text :=
select * from table where "id_group" = :id_group;

ZQuery2, DS2
ZQuery2.SQL.Text :=
select "id" as "id_group", "gr_name" from table_gr;

Плдключаю так:
1. cxGrid1.cxGridDBTableView1
DataSource := DS1

2. cxDBLookUpComboBox1
DataSource := DS1
DataField := id_group;
ListSource := DS2
ListFieldNames := gr_name;
KeyFieldNames := id_group;


Соответственно когда в cxDBLookUpComboBox1 выбираю запись в запрос ZQuery1.SQL должен подставляться параметр id_group. Но этого не происходит, расскажите как правильно настроить компоненты. можно это сделать без программного кода?

компоненты доступа к данным Zeos
Автор: f3ka
Дата сообщения: 23.12.2009 09:35
fortezza
надо бы поподробнее описать задание, а то из этого не понятно, хотите чтобы в поле id_group таблицы table отображалась расшифровка номера или же хотите чтобы таблица table фильтровалась согласно выбранной группе из таблицы table_gr?
Автор: maratea
Дата сообщения: 23.12.2009 09:39
привет еще раз. Меня с моим экспортом все проигнорили, ну и ладно)) я смирилась с ExportGridToExcel, так что теперь вопрос про него. Эта функция умеет экспортировать только данные, которые в гриде хранятся (AValue)? нет ли способа экспортировать отображаемые данные (AText)?

Вот например у меня данные приходят как integer, а я потом этот из этого integer делаю красивую строчку ('Секунд: ...') и хочу, чтобы именно эта строчка попала в Excel.
Автор: fortezza
Дата сообщения: 23.12.2009 09:46
f3ka

хочу чтобы в cxDBLookUpComboBox1 отображались названия групп, т. е. (фрукт, овощ, ягода), при выборе определенной группы, отображались записи с соответствующей группой в cxGrid
Автор: f3ka
Дата сообщения: 23.12.2009 10:04
fortezza
тогда надо брать не cxDBLookUpComboBox, а просто cxLookUpComboBox и вешать обработчик на изменение значения в нем (OnEditValueChanged), в нем например формировать запрос для фильтрации...
или как вариант сделать Master-Detail, ZQuery2 - master, ZQuery1 - detail... В DS1 выставить MasterDataSource = DS2, в запрос ZQuery1 насколько я помню надо в качестве параметра написать :MAS_id_group, cxLookUpComboBox.Properties в настройках выставить ListSource, KeyFieldNames, ListFieldNames, ListOptions.SyncMode = True... вроде должно заработать...
Автор: fortezza
Дата сообщения: 23.12.2009 10:29
Все работает, спасибо!!! наконец-то ))
Автор: vladman
Дата сообщения: 23.12.2009 10:33
kii

Цитата:
Нечто подобное я и преполагал, но хотелось бы на прямую без промежуточного DataSet.

Без промежуточного, скорее всего, не получится. Может FR что-то и придумал в этом плане, но мне это не известно - FR не использую. А почему, если не секрет, не хочется использовать промежуточный DataSet?
baxram

Цитата:
v42. Считаете, нужно обновить до более свежей?

Думаю, да.
maratea

Цитата:
Меня с моим экспортом все проигнорили

Ну почему же проигнорировали, скорее всего вы пропустили ответ - http://forum.ru-board.com/topic.cgi?forum=33&topic=10123&start=2220#19

Цитата:
нет ли способа экспортировать отображаемые данные (AText)?


Цитата:
Вот например у меня данные приходят как integer, а я потом этот из этого integer делаю красивую строчку ('Секунд: ...') и хочу, чтобы именно эта строчка попала в Excel.

Многое зависит от того как (в каком обработчике) вы делаете эту красивую строчку. Если в onCustomDrawCell - то грид ничего не знает о ваших изменениях, если в OnGetDisplayText - то попробуйте в вызове процедуры экспорта (ExportGridToExcel) установить параметр AUseNativeFormat = False.
Автор: X11
Дата сообщения: 23.12.2009 10:44

Цитата:
А почему, если не секрет, не хочется использовать промежуточный DataSet?

Вот у меня, например, идёт отправка выделенных записей cxGrid`а в промежуточный датасет (девовский), тоже привязанный к другому cxGrid`у.
Оооочень медленно. В dxMemData уже все поля созданы в дизайне.

Вот код, может я что-то забыл?

Код:
procedure TfmMain.OtborByCxGrid(FromGrid, ToGrid:TcxGridDBTableView);
Var
i, i2, f:Integer;
DataSet1:TDataset;
cxGridDBColumn :TcxGridDBColumn;
begin
if (FromGrid = nil) or (ToGrid = nil) then Exit;

Screen.cursor := crSQLWait;
with FromGrid.DataController.DataSet do
try
if not ToGrid.DataController.DataSource.DataSet.active then ToGrid.DataController.DataSource.DataSet.Open;
DisableControls;
DataSet1 := ToGrid.DataController.DataSource.DataSet;
for i:=0 to FromGrid.Controller.SelectedRecordCount-1 do begin
//не пихаем в таблицу отбора одинаковые записи
i2 := FromGrid.Controller.SelectedRecords[i].Values[FromGrid.GetColumnByFieldName('ID').Index];
if DataSet1.Locate('ID', i2,[] ) then Continue;

DataSet1.Append;
for f := 0 to DataSet1.FieldCount-1 do begin
cxGridDBColumn := FromGrid.GetColumnByFieldName(DataSet1.Fields[f].FieldName);
if cxGridDBColumn <> nil then
DataSet1.Fields[f].Value := FromGrid.Controller.SelectedRecords[i].Values[cxGridDBColumn.Index];
end;
DataSet1.post;
end;//for i:=0 to FromGrid.DataController.GetSelectedCount-1 do
finally
EnableControls;
Screen.cursor := crDefault;
end;//try
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

Предыдущая тема: Delphi: tcp клиент в потоке


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