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

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

Автор: JohnSilver182
Дата сообщения: 01.10.2009 19:39
упсс . Глючит меня .

Как выводить DateTime в ячейке cxGrid например в формате dd/mm/yy
Автор: Perets
Дата сообщения: 01.10.2009 19:40
Такой вопрос, может кто знает.
Пытаюсь освоить cxGridDBBandedTableView, где одна колонка берется из SQL запроса, вторая - просто CheckBox, то есть с БД не связана.
Заполняю все чекбоксы False-ами, запускаю. При проставлении галки в любом чекбоксе остальные изменяются на Null. С чем это может быть связано и как с этим бороться?
Автор: Chukotka
Дата сообщения: 01.10.2009 19:50
QuantumTreeList - как получить данные о видимости и размере полосок скроллбаров?
Автор: FunCode
Дата сообщения: 01.10.2009 20:33
Perets

Цитата:
Такой вопрос, может кто знает.
Пытаюсь освоить cxGridDBBandedTableView, где одна колонка берется из SQL запроса, вторая - просто CheckBox, то есть с БД не связана.
Заполняю все чекбоксы False-ами, запускаю. При проставлении галки в любом чекбоксе остальные изменяются на Null. С чем это может быть связано и как с этим бороться?

что значит не связан с БД, такое возможно, но только косвенно, потому как у Grid нет такого состояния когда одновременно и связанные и несвязанные поля ... я обычно делаю так в таких случаях, текст SQL запроса к примеру такой
SELECT id, name, CAST(0 AS bit) AS checkfield FROM MyTable (вариант для MS SQL)

Добавлено:
Chukotka

Цитата:
QuantumTreeList - как получить данные о видимости и размере полосок скроллбаров?

что имеется ввиду под размером полосок ? если визуально, то они будут соотвественно Height и Width самого TreeLista ... а насчет видимости, так там же помоему по аналогии с GridView выставляется в OptionsView.ScrollBars их отображение ... (просто сейчас поставил 2010 и Tree не ставил пока, поэтому точного названия этого свойства сказать не могу)
Автор: Perets
Дата сообщения: 01.10.2009 20:50
FunCode

Цитата:
что значит не связан с БД, такое возможно, но только косвенно, потому как у Grid нет такого состояния когда одновременно и связанные и несвязанные поля ...

А что значит косвенно? GridDBBandedTableView как раз и создан для существования колонок, с базой не связанных. В свойстах столбца задается только тип и никакой видимой привязки к полям БД. В Демо есть проект UnboundColumnsDemo, там такого как у меня не происходит, правда грид связан с таблицей, а не с запросом.
Может дело как раз в этом...
Автор: FunCode
Дата сообщения: 01.10.2009 20:58
Perets
Сейчас нет возможности поставить демки, но с удовольствием посмотрю, потому как не слышал про unbound mode при подключенных данных, потому как вроде из названия следует, что он и есть unbound mode, может для столбцов сейчас сделали ... А KeyField точно прописан в DataControllere ?
Автор: Perets
Дата сообщения: 01.10.2009 21:10
FunCode

Цитата:
А KeyField точно прописан в DataControllere ?

В DataControllere таблицы никаких полей не прописано.
У столбцов есть DataBinding, так у того, кто связан с запросом, KeyFieldName прописан и значение поля в гриде отображается.
У второго, который чекбокс, прописан только тип boolean и есть свойства чекбокса.
Автор: Chukotka
Дата сообщения: 01.10.2009 21:34
FunCode

Цитата:
что имеется ввиду под размером полосок ? если визуально, то они будут соотвественно Height и Width самого TreeLista...
Глупости. Какое, по-вашему, значение Width будет у VScrollBar?

Цитата:
...а насчет видимости, так там же помоему по аналогии с GridView выставляется в OptionsView.ScrollBars их отображение
Это свойство для возможности отображения - но скроллбар появляется, только если список не полностью помещается в размерах контрола по вертикали и горизонтали соответственно.
Автор: vladman
Дата сообщения: 01.10.2009 22:48

Цитата:
Пытаюсь освоить cxGridDBBandedTableView, где одна колонка берется из SQL запроса, вторая - просто CheckBox, то есть с БД не связана.

По-моему эта статья уже стала христоматийной - How to set up an unbound item in a data-aware View
FunCode

Цитата:
что значит не связан с БД, такое возможно, но только косвенно, потому как у Grid нет такого состояния когда одновременно и связанные и несвязанные поля

Пожалуйста, проверяйте свои утверждения до публикации на паблике, и не вводите, тем более тех, кто только пытается освоить, в заблуждение.
Автор: Perets
Дата сообщения: 01.10.2009 23:03
vladman
Вот спасибо, выручил. =))
Оказывается я не сделал аж две вещи:
.DataController.DataModeController.SmartRefresh := True;
.DataController.KeyFieldNames := 'aUniqueField';
Попеременно включал, а обе сразу не догадался.
Теперь все заработало.
Автор: vladman
Дата сообщения: 01.10.2009 23:17
SIgor33

Цитата:
Можно ли TcxGridPopupMenu повесить так чтобы он вызывался только на определенном столбце (поле БД)

Можно, обрабатывайте событие OnPopup вашего TcxGridPopupMenu

Код:
procedure <YourForm>.<YourcxGridPopupMenu>Popup(ASenderMenu: TComponent; AHitTest: TcxCustomGridHitTest; X, Y: Integer; var
AllowPopup: Boolean);
begin
AllowPopup := (AHitTest is TcxGridColumnHeaderHitTest ) and
(TcxGridDBColumn(TcxGridColumnHeaderHitTest(AHitTest).Column).DataBinding.FieldName = '<YourColumnName>');
end;
Автор: SIgor33
Дата сообщения: 02.10.2009 08:35
vladman

Цитата:
procedure <YourForm>.<YourcxGridPopupMenu>Popup(ASenderMenu: TComponent; AHitTest: TcxCustomGridHitTest; X, Y: Integer; var
AllowPopup: Boolean);
begin
AllowPopup := (AHitTest is TcxGridColumnHeaderHitTest ) and
(TcxGridDBColumn(TcxGridColumnHeaderHitTest(AHitTest).Column).DataBinding.FieldName = '<YourColumnName>');
end;

Спасибо за помощь. Но у тебя здесь это событие обрабатывается когда кликаешь по заголовку грида а хотелось чтобы на конкретной ячеки я понял что надо использовать вместо TcxGridColumnHeaderHitTest TcxGridRecordCellHitTest и застопорился подскажи выход
Автор: vladman
Дата сообщения: 02.10.2009 10:05
SIgor33

Цитата:
хотелось чтобы на конкретной ячеки

TcxGridPopupMenu по умолчанию имеет три "места" где оно может активироваться:
- Column Header
- Footer
- Group Row
Как у вас происходит так что TcxGridPopupMenu активируется на конекретной ячейке?
Вы скорее всего дополнили встроенные меню своим PopupMenu, и у становили у него свойство HitType в том числе и в gvhtCell. Правильно ли я вас понял?
Автор: SIgor33
Дата сообщения: 02.10.2009 10:43
vladman
Да вы меня правильно поняли именно это интересует.
А по поводу второго вопроса я имел то что допустим если в качестве edita используешь допустим BlobEdit и включаешь ShowEditButtons отображается кнопка в качестве рисунка у нее точки и когда наводишь на нее hint ни какой не виден. Хотелось бы поменять картинку и увидить hint
Автор: ZalivkoDenis
Дата сообщения: 02.10.2009 10:57
Доброго времени суток!
Как и у многих других, у меня ступор.
Есть cxGrid, есть два cxGridDBTableView оформленные как master-detail, каждый View основывается на TpFIBDataSet. Также имеется некая кнопка, пускай cxButton.
Необходимо, чтобы cxButton.Enable := False, если выбрана запись MasterDataset и, соотвественно cxButton := True, при выбранной записи DetailDataset...
Я так понимаю, что необходимо использовать для каждого cxGridDBTableView событие типа OnFocusedItemChanged? Чёт не получается :.( (уже на грани истерики). (Dev46, Multiselect=False, SyncMode=True, SmartRefresh=True, CellSelect=False).
Спасибо.
Автор: volser
Дата сообщения: 02.10.2009 11:10
ZalivkoDenis
В cxGrid есть свойство ActiveView.
Автор: ZalivkoDenis
Дата сообщения: 02.10.2009 11:16
volser
А не подскажете на что повесить его проверку, на какое событие?
Автор: SIgor33
Дата сообщения: 02.10.2009 11:24
Вопрос хотелось бы для колонки в которой находиться Blob сделать так чтобы если он пуст то вне ячейке текст НЕТ Данных
Вот нашел способ сделать для поля integer
procedure <MainForm>.<MaincxGridDBColumn>GetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
if ARecord.Values[Sender.Index]>3 then
AText:='Больше трех';
end;
А для bloba ни как не пойму что делать
Автор: ZalivkoDenis
Дата сообщения: 02.10.2009 11:29
volser

Цитата:
В cxGrid есть свойство ActiveView.

Это свойство почему то возвращает всё время самый верхний View... Видимо, как-то по-другому нужно делать. (повесился на событие cxGrid.OnFocusedViewChanged)...

Проблема пока, к сожалению не решена
Автор: FunCode
Дата сообщения: 02.10.2009 11:30
ZalivkoDenis

Цитата:
Это свойство почему то возвращает всё время самый верхний View... Видимо, как-то по-другому нужно делать. (повесился на событие cxGrid.OnFocusedViewChanged)...

Проблема пока, к сожалению не решена

Так а чем не устраивает OnFocusedViewChanged ?

Так а если просто надо узнать какой View - то не ActiveView, а FocusedView ...
Автор: vladman
Дата сообщения: 02.10.2009 11:44
SIgor33

Цитата:
Да вы меня правильно поняли именно это интересует.


Код: procedure <YourForm>.<YourcxGridPopupMenu>Popup(ASenderMenu: TComponent; AHitTest: TcxCustomGridHitTest; X, Y: Integer; var
AllowPopup: Boolean);
begin
AllowPopup := (AHitTest is TcxGridColumnHeaderHitTest ) and
(TcxGridDBColumn(TcxGridColumnHeaderHitTest(AHitTest).Column).DataBinding.FieldName = '<YourColumnName>');
AllowPopup := ((AHitTest is TcxGridRecordCellHitTest) and
(TcxGridDBColumn(TcxGridRecordCellHitTest(AHitTest).Item).DataBinding.FieldName = '<YourColumnName>')) or AllowPopup;
end;
Автор: ZalivkoDenis
Дата сообщения: 02.10.2009 11:59
FunCode
В данном сучае, похоже, как вариант устроит. Но, необходима оговорка:

Цитата:
а если просто надо узнать какой View

Можно узнать View только верхнего уровня, а вот для detail этот самый вью создаётся как clone и я пока не нашёл как определить, что это клон от вью, созданного в дезайн-тайме второго уровня... Вообщем, как-то так... Пошёл от противного, если вью не первого уровня (нулевого), что вполне нормально определяется как AFocusedView=tv_Main, значит это детальный вью...
Хотелось бы узнать как ПРАВИЛЬНО обработать ситуацию, описанную мной несколькими постами выше, потому как это решение тянет, прям скажем, на выкручивание...
Спасибо.
Автор: vladman
Дата сообщения: 02.10.2009 12:14
ZalivkoDenis

Цитата:
Как и у многих других, у меня ступор.
Есть cxGrid, есть два cxGridDBTableView оформленные как master-detai....
Необходимо, чтобы cxButton.Enable := False, если выбрана запись MasterDataset и, соотвественно cxButton := True, при выбранной записи DetailDataset...

Обрабатываем событие OnFocusedViewChanged вашего cxGrid, что-то вроде этого

Код: procedure <YourForm>.<YourcxGrid>FocusedViewChanged(Sender: TcxCustomGrid; APrevFocusedView, AFocusedView:
TcxCustomGridView);
begin
<YourButton>.Enabled := not (AFocusedView = <YourcxGridDBTableViewMaster>)
end;
Автор: ZalivkoDenis
Дата сообщения: 02.10.2009 12:30
vladman
Вы просто гений (а может разработчик , а может и то и другое )!!! В который раз убеждаюсь! СПАСИБО!!! Pattern(!) -- это всё из-за моего плохого английского В хелпе это есть! СПАСИБО!!!
Автор: vladman
Дата сообщения: 02.10.2009 12:41
ZalivkoDenis

Цитата:
СПАСИБО!!!

Не за что, рад что помог. А по-поводу английского - это да, в нашем деле он строить и жить помогает!
Автор: SIgor33
Дата сообщения: 02.10.2009 13:13
vladman
Примного багодарен Ваши советы помогли
Автор: ZalivkoDenis
Дата сообщения: 03.10.2009 04:18
Доброго времени суток!
Не совсем критичный момент, но, тем не менее, есть вопросик.
(Может быть сразу непосредственно к vladman - самые квалифицированные ответы в топе!)
Использую ImageComboBoxProperties для TcxGridDBColumn. Данные отображаются сейчас так: Image - left justify, Caption (text) - right justify. А хотелось бы, чтобы и Image и Text были как бы "слеплены", имели одно justify. Чтобы реализовать такое отображение обязательно определять событие OnCustomDrawCell или есть какие-нибудь другие способы?
Спасибо.
Автор: vladman
Дата сообщения: 03.10.2009 11:56
ZalivkoDenis

Цитата:
хотелось бы, чтобы и Image и Text были как бы "слеплены", имели одно justify

Все просто. Скорее всего <YourImageComboBoxColumn> имеет тип integer, а поля с типом integer, по умолчанию, выравнивается вправо. Измените свойство <YourImageComboBoxColumn>.Properties.Alignment.Horz в значение taLeftJustify и все "слепится", и даже без обработки события OnCustomDrawCell
Автор: ZalivkoDenis
Дата сообщения: 03.10.2009 14:02
2vladman

Цитата:
Измените свойство <YourImageComboBoxColumn>.Properties.Alignment.Horz в значение taLeftJustify

Весь парадокс заключается в том, что именно так и было установлено, потому я и не смотрел в этом направлении. Но(!) после того, как я ВЫБРАЛ опять же taLeftJustify (т.е. как бы ничего и не изменилось), это свойство начало отображаться в IDE не как значение по-умолчанию (в моей настройке -- шрифт отображения значения меняется на bold) и действительно "слепилось"... Но, вот интересно, это глюк IDE или в Dev что-то не то. Но, главное, что я (а со мной и многие форумчане) понял в чём "фишка". Спасибо!
Автор: vladman
Дата сообщения: 03.10.2009 15:48
ZalivkoDenis

Цитата:
после того, как я ВЫБРАЛ опять же taLeftJustify (т.е. как бы ничего и не изменилось), это свойство начало отображаться в IDE не как значение по-умолчанию (в моей настройке -- шрифт отображения значения меняется на bold) и действительно "слепилось"...

Да, есть такая особенность у Properties.Alignment. Чей конкретно это bug - не знаю, не разбирался. Об этом просто нужно помнить , как говорится bug сойдет за feature.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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