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

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

Автор: eddoc
Дата сообщения: 27.01.2013 13:37
makz

Код: Код не проверял, допилите если что
Автор: Marcello_TLT
Дата сообщения: 27.01.2013 23:44
В TcxPivotGrid добавляю записи через AppendRecord из датасета в событии AfterOpen. Поскольку добавление записей происходит в несколько этапов, то вижу, что число записей в гриде (DataController.RecordCount) увеличивается. Но после завершения этапов грид почему-то остается пустым. Ни в одном поле ничего нет. Все фильтры состоят из двух строк: (Show All) и пустая строка. Поля созданы в дизайнтайме. Заполнение происходит так:

Код:
DataSet.First;
with PivotGrid.DataController do
begin
while not DataSet.Eof do
begin
AppendRecord;
vRowId := RecordCount - 1;
Values[ vRowId, FieldIndexByName( 'dc_date_p' ) ] := DataSet.FieldValues[ 'dc_date' ];
Автор: reenoip
Дата сообщения: 28.01.2013 05:46
makz
спасибо, там самое оно:


Код: procedure TForm1.cxComboBox1PropertiesDrawItem(AControl: TcxCustomComboBox;
ACanvas: TcxCanvas; AIndex: Integer; const ARect: TRect;
AState: TOwnerDrawState);
begin
if AControl.Properties.Items[AIndex] = '-' then
ACanvas.FillRect(ARect, clWindowText)
else
begin
ACanvas.DrawTexT(AControl.Properties.Items[AIndex], ARect, 0);
end;
end;

procedure TForm1.cxComboBox1PropertiesMeasureItem(
AControl: TcxCustomComboBox; AIndex: Integer; ACanvas: TcxCanvas;
var AHeight: Integer);
begin
if AControl.Properties.Items[AIndex] = '-' then
AHeight := 1;
end;
Автор: reenoip
Дата сообщения: 28.01.2013 12:20
[deleted]
Автор: makz
Дата сообщения: 28.01.2013 16:30
reenoip
procedure TForm1.cxComboBox1PropertiesDrawItem(AControl: TcxCustomComboBox;
ACanvas: TcxCanvas; AIndex: Integer; const ARect: TRect;
AState: TOwnerDrawState);
begin
if AControl.Properties.Items[AIndex] = '-' then
ACanvas.FillRect(ARect, clWindowText)
else
begin
if odSelected in AState then begin
ACanvas.FillRect(ARect, clBlue);
ACanvas.Font.Color:=clWhite;
end
else
begin
ACanvas.FillRect(ARect, clWhite);
ACanvas.Font.Color:=clBlack;
end;
ACanvas.DrawTexT(AControl.Properties.Items[AIndex], ARect, 0);
end;
end;
Автор: reenoip
Дата сообщения: 29.01.2013 05:06
makz
благодарю, самое оно!
Автор: reenoip
Дата сообщения: 31.01.2013 16:13
А cxGrid поддерживает ZoomIn / ZoomOut? А то колонок - тьма, хотелось бы, чтобы у пользователя была возможность увеличивать/уменьшать масштаб грида.
Автор: marser
Дата сообщения: 31.01.2013 18:17
reenoip

Цитата:
А cxGrid поддерживает ZoomIn / ZoomOut? А то колонок - тьма, хотелось бы, чтобы у пользователя была возможность увеличивать/уменьшать масштаб грида.

Нет, не поддерживает. Уменьшайте или увеличивайте размер шрифта и пропорционально изменяйте ширину колонок. Высота строк изменится автоматом.
Автор: reenoip
Дата сообщения: 01.02.2013 07:28
Ок, понятно, спасибо, буду знать.







А как реализовать в cxGrid независимый от регистра поиск по всем видимым колонкам? Т.е. проще говоря нужен некий аналог Ctrl+F: на форме есть Edit + cxGrid, при теста вводе в Edit, к примеру "нов", моментально отсеять ненужное и отобразить только содержащие эти три буквы строки (т.е. в колонке "ФИО" останутся только "Иванов", "Новиков", "Голованов", и т.д., в колонке "Профессия" останутся только "Специалист по внедрению инновационных технологий", и т.п.).


p.s.
Поиски и вдумчивое чтение на эту тему в официальном ЦП, увы, не помогло. Но, может, тут кто-то уже сделал подобное.

Добавлено:
Искал так и так. Может, фильтровал неверно? Просто как-то маловероятно, что мне первому понадобился такой поиск.
Автор: BlackVetal
Дата сообщения: 01.02.2013 07:51
reenoip
не знаю как в делфи компоненты девок, вот девки под VS - там есть AdvBandedGridView: позволяет вывести в несколько строк одну запись (как раз когда целая куча колонок) и еще разбить эти колонки по группам
Автор: reenoip
Дата сообщения: 01.02.2013 07:56
Возможно, я не совсем точно раскрыл свой вопрос, за что приношу свои извинения. Минут через 10-15 опубликую в картинках, для уточнения.
Автор: makz
Дата сообщения: 01.02.2013 08:00
reenoip
Это называется "фильтр", а не поиск.
Автор: reenoip
Дата сообщения: 01.02.2013 08:06
Вот как-то так...




Добавлено:
Т.е. мне нужен некий "глобальный фильтр"? Ок, тогда буду искать такой. Спасибо.
Автор: makz
Дата сообщения: 01.02.2013 08:30
reenoip
Ну "глобального" нет в природе, но сделать, пожалуй не слишком сложно. Только вот какой смысл искать что-либо сразу во всех колонках?
Автор: mdid
Дата сообщения: 01.02.2013 08:43
подскажите плз, как в TcxRichEditProperties загрузить данные из стрима?
Автор: reenoip
Дата сообщения: 01.02.2013 08:49
makz
таблица (грид) у меня имеет более сложную структуру, чем я накидал на скорую руку для демонстрации. Конечно, фильтр в каждой отдельно взятой колонке - это гуд, но что делать пользователю, если он знает лишь одно ключевое слово (да и то не целиком, а лишь его некоторую часть)? Заставить пользователя шерстить каждую колонку - не проблема, заставлю, но хотелось бы сжалиться над ним и минимизировать потерю рабочего времени на поиск (а поиск в таблице с десятками тысяч строк и почти тремя десятками колонок - уже не роскошь, а очень важная необходимость).

Добавлено:
Кажется, нашёл то, что надо, но фильтр в примере зависим от регистра. Может кто-нибудь помочь совладать с ним?
Автор: makz
Дата сообщения: 01.02.2013 09:11
mdid
http://www.devexpress.com/Support/Center/Question/Details/Q422760

reenoip
Ну назначить программно один фильтр на нужные колонки не проблема вроде.
Автор: mdid
Дата сообщения: 01.02.2013 09:11
reenoip
а в чем проблема запрос сгенерировать?

Добавлено:
makz
в обычный TcxRichEdit я в курсе. А у TcxRichEditProperties нет ничего похожего на стрим. А EditValue стрим не ест.
Автор: makz
Дата сообщения: 01.02.2013 09:17
Таки да, фильтровать НД непосредственно значительно продуктивнее, в случае с десятками тысяч записей-то.

Добавлено:
mdid
Имеется ввиду репозиторий?
Вообще не очень понятно о чем речь; то ли текст загрузить надо, то ли сами проперти? А откуда взялось EditValue в TcxRichEditProperties?
Автор: mdid
Дата сообщения: 01.02.2013 09:41
makz
нужно загрузить текст в TcxBarEditItem типа RichEdit через поток. Свойства мне не нужны. Текст хранится в базе.
Автор: X11
Дата сообщения: 01.02.2013 10:17

Цитата:
но фильтр в примере зависим от регистра. Может кто-нибудь помочь совладать с ним?


DataController.Filter.Options.fcoCaseInsensitive := True
Автор: reenoip
Дата сообщения: 01.02.2013 10:56
X11
благодарю! А то, обложившись всякими мануалами, слона-то я, к сожалению, и не приметил



Осталось теперь filterbuilder задизаблить (чтобы его вообще не было) и всё:



Добавлено:
Хм... Поиски ни по "hide filterbuilder", ни по "disable filterbuilder" результатов не дают. Мне эта панель глаза не особо мозолит (хотя, нет же её в том же Excel после применения фильтров - и ничего, жить можно), но пользователи мои (прелюбопытные личности) задолбают меня лишними вопросами.
Автор: X11
Дата сообщения: 01.02.2013 11:26
ты можешь его только скрыть
Fiterbox.visible := fvNever;
Автор: exteris
Дата сообщения: 01.02.2013 11:35
mdid

Код:
cxBarEditItem1.SetFocus;
TcxRichEdit(TcxBarEditItemControl(cxBarEditItem1.Links[0].Control).Edit).Lines.LoadFromStream(...)
Автор: mdid
Дата сообщения: 01.02.2013 11:55
exteris
спасибо, но
TcxBarEditItemControl(fmMain.ImageSelectionDescr.Links[0].Control).Edit - nil
fmMain.ImageSelectionDescr.Links[0].Control - not nil
Автор: eddoc
Дата сообщения: 01.02.2013 12:02
reenoip
Прислушайтесь к советам фильтрации на сервере: проще и "дешевле" по трафику.

Кстати, СУБД какая?
Автор: reenoip
Дата сообщения: 01.02.2013 12:48
eddoc
MySQL. Выделенный сервер в локальной гигабитной сети. Нагрузка на него, если честно, настолько мизерная (от 1 до 5% в пике), что оптимизацией можно пренебречь.
Автор: mdid
Дата сообщения: 01.02.2013 13:20
reenoip
о какой оптимизации идет речь? вы считаете что поиск на клиенте это оптимизация?это ведь смешно.
Автор: reenoip
Дата сообщения: 01.02.2013 13:35
mdid
вы, кажется, меня не так поняли. Сообщением выше мне предложили сделать "фильтрацию на сервере" - дескать, так "проще и дешевле". А я ответил, что мне эта "оптимизация" (в целом ведь перенос "фильтрации на сервер" с клиентов является в каком-то смысле оптимизацией, не так ли?) в принципе не особо-то и нужна: "толстые" клиенты весьма производительные, сетевая инфраструктура позволяет, поэтому перекладывать вычисления с них на сервер нет нужды, хотя сервер и так ничем особо не загружен.


Про то, что "оптимизация - это поиск на клиенте" речи, если что, вообще не было, это же априори абсурд...
Поиск на клиенте меня в данный момент устроит полностью (если это будет нормальным и полноценным поиском), но это не является оптимизацией. Это, по идее, в большинстве случаев является наплевательским отношением к вычислительным ресурсам. Но т.к. их у меня в избытке (и даже более чем), тратить время на поиск решения для их экономии в данный момент - не совсем рационально, именно это и послужило основной причиной выбора "удобство, красота, скорость", а не "удобство, красота, скорость".
Автор: X11
Дата сообщения: 01.02.2013 13:39
Народ, прекращайте флудить. Развели тут ромашка (с)!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


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