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

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

Автор: TechnoDreamer
Дата сообщения: 18.01.2011 22:19
marser

Цитата:
Еще раз проверил. При NewItemRow.Visible := True (наверху весит строчка: "Click here to add a new row") положительного результата получить не удалось.  

Ну не знаю, что там не получается, а у меня работает То что OnEditKeyDown и OnKeyDown разные события учитываете? Может конечно там и какое нибудь свойство мешает из миллиона имеющихся, в них сам черт ногу сломит. Но насколько я понимаю DataController просто вызывает соответствующие методы датасета? Так чем тогда NewRow может мешать... У меня есть и строка и по клавише "вниз" добавление - всё пашет без проблем. Актуально для bound mode, с другими никогда не работал.

P.S. Это кстати напомнило мне о том, что надо сделать еще проверку на то, заполнена ли последняя запись.

P.P.S. Сделать для вас тестовый пример что ли? Только что то лениво... пусть kniazkinP ответит, если у него не пашет тогда сделаю.
Автор: marser
Дата сообщения: 19.01.2011 08:03
alexander315435

Цитата:
marser, спасибо, а в winforms как аналогичный компонент называется

Незнаю, c WinForms не работаю.

TechnoDreamer

Цитата:
То что OnEditKeyDown и OnKeyDown разные события учитываете?

Еще как учитываю.

Цитата:
Может конечно там и какое нибудь свойство мешает из миллиона имеющихся, в них сам черт ногу сломит

Я пробовал не на готовом проекте, а создал тестовый. Так что почти всё по дефолту.

Цитата:
Но насколько я понимаю DataController просто вызывает соответствующие методы датасета?

Вызывать то он вызывает, только потом Cancel проходит. Кстати, попробывал не на DB, а на обыкновенном гриде (cxGridTableView). Тоже самое.

Цитата:
Сделать для вас тестовый пример что ли?

Спасибо, не стоит. У меня к этой задаче больше "спортивный" интерес, чем практический. Если понадобится, тогда и буду основательно разбираться. Интересно, а как это визуально выглядит? Добавляется вниз грида новая строка для редактирования (как и без NewItemRow), или курсор просто перепрыгивает в строку NewItemRow?
Автор: X11
Дата сообщения: 19.01.2011 12:53
Вопрос по cxGrid и типу полей (TcxCheckBox).
Предисловие.
На форме есть 2 грида.
У обоих есть поле 'DELETED'. В первом датасете это полей типа String, а во втором типа Boolean.

В обоих гридах сделаны соответствующие настройки и в полях выводятся чекбоксы.

Есть код в событии OnGetContentStyle. Один код на оба грида.
В чём проблема. Проблема в том, что не хочется указывать два разных условия для определения, какого именно типа столбец.
Это видно ниже из кода: if Item.DataBinding.ValueType = ... then


Код:
procedure TfmApartSearch.dbgApartStylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; var AStyle: TcxStyle);
Var
Item: TcxCustomGridTableItem;
begin
//если запись удалена, то выводим красным

Item := TcxGridDBTableView(Sender).DataController.GetItemByFieldName('DELETED');

if Item = nil then exit;

if Item.DataBinding.ValueType = 'Boolean' then
if (not VarIsNull(ARecord.Values[Item.Index])) and
(ARecord.Values[Item.Index] = true)
then
AStyle := styleCliDeleted;


if Item.DataBinding.ValueType = 'String' then
if (not VarIsNull(ARecord.Values[Item.Index])) and
(ARecord.Values[Item.Index] = 'T')
then
AStyle := styleCliDeleted;

end;
Автор: marser
Дата сообщения: 19.01.2011 13:21
X11
if VarSameValue(ARecord.Values[AItem.Index], True) then

Добавлено:
X11
Погорячился! Лучше так
if VarSameValue(ARecord.Values[AItem.Index], TcxCheckBoxProperties(AItem.Properties).ValueChecked) then
Автор: X11
Дата сообщения: 19.01.2011 13:44
Спасибо больше.

А до состояния checked/unchecked нинак, получается, не добраться у TcxGridDBColumn?
Автор: tanaseduard
Дата сообщения: 19.01.2011 13:53
X11


Цитата:
А до состояния checked/unchecked нинак, получается, не добраться у TcxGridDBColumn?


Если в проертях стоит CheckBox , то можно через TcxCheckBoxEditProperties(Column.Properties).Checked.
Вроде так.
Автор: X11
Дата сообщения: 19.01.2011 14:01
Не могу понять, почему текст в гриде не окрашивается в красный цвет у нужных записей.

Вот код:

Код:
if TcxGridDBColumn(AItem).DataBinding.FieldName = 'DELETED' then
begin
if ((not VarIsNull(ARecord.Values[AItem.Index])) and
VarSameValue(ARecord.Values[AItem.Index], TcxCheckBoxProperties(AItem.Properties).ValueChecked))
then
AStyle := styleCliDeleted;//
end;
Автор: marser
Дата сообщения: 19.01.2011 14:19
X11
Какой TextColor? Где текст? Color := clRed

Добавлено:
Событие на гриде или колонке?
Если даже на гриде, Вы все равно пытаетесь раскрасить колонку с Check-ом.
Автор: X11
Дата сообщения: 19.01.2011 14:36

Цитата:
Событие на гриде или колонке?

у вьюхи


Цитата:
Какой TextColor? Где текст? Color := clRed

Мне нужен не закрасить строку красным, а вывести именно текст красным.

Тогда 2 вопроса:
1. зачем Font.color у стиля
2. зачем TextColor у стиля.

До версии 54 я устанавливал только TextColor в красный цвет и всё было ОК.
Автор: marser
Дата сообщения: 19.01.2011 14:47
X11

Цитата:

Код: if TcxGridDBColumn(AItem).DataBinding.FieldName = 'DELETED' then
begin
if ((not VarIsNull(ARecord.Values[AItem.Index])) and
VarSameValue(ARecord.Values[AItem.Index], TcxCheckBoxProperties(AItem.Properties).ValueChecked))
then
AStyle := styleCliDeleted;//
end;
Автор: X11
Дата сообщения: 19.01.2011 14:58

Цитата:
Этот код применяет стиль styleCliDeleted только к колонке TcxGridDBColumn(AItem).DataBinding.FieldName = 'DELETED'. Эта колонка cxCheckBox. В ней нет текста.


Да, начинает доходить.
Автор: marser
Дата сообщения: 19.01.2011 15:00
X11

Цитата:
зачем Font.color у стиля

Font.color не используется
Color - цвет фона, TextColor - цвет текста

Добавлено:
X11
Есть еще событие OnCustomDrawCell. В принципе тоже самое, что и OnGetContentStyle, но, мне кажется, что должно побыстрей работать, т.к. используется непосредственно TcxCanvas.
ACanvas.Brush.Color := цвет фона, ACanvas.Font.Color := цвет текста
Автор: X11
Дата сообщения: 19.01.2011 15:35
Хорошо. Это я всё понимаю.
Не доходит, как закрасить текст всей строки, если значение поля TRUE?

Вот код:

Код: if TcxGridDBColumn(AItem).DataBinding.FieldName = 'DELETED' then
begin
if ((not VarIsNull(ARecord.Values[AItem.Index])) and
VarSameValue(ARecord.Values[AItem.Index], TcxCheckBoxProperties(AItem.Properties).ValueChecked))
then
AStyle := styleCliDeleted;
end;
Автор: crazypiggy
Дата сообщения: 19.01.2011 15:52
Добрый день. Долго искал, но чтото не смог найти ответа на вопрос. как динамически передать в dxComponentReport cxGrid
Делаю так

Код:
MainForm.dxComponentPrinter1.CurrentLink:=MainForm.dxComponentPrinter1.AddLink(cxGrid1)
MainForm.dxComponentPrinter1.Preview(true,MainForm.dxComponentPrinter1.CurrentLink);
Автор: X11
Дата сообщения: 19.01.2011 16:20

Цитата:
как динамически передать в dxComponentReport cxGrid


procedure PrintToLazer(grid:TObject; ....
begin

if (grid is TcxGrid) then
begin
dxComponentPrinter1Link1.Component := TcxGrid(grid);
dxComponentPrinter1.Preview(true);
....
...

Добавлено:

Цитата:
cxGridPokazSCHPOKPropertiesChange

Может ImmediatePost в True установить?
Автор: crazypiggy
Дата сообщения: 19.01.2011 16:47
X11

Цитата:
Может ImmediatePost в True установить?

Не помогает.
Автор: marser
Дата сообщения: 19.01.2011 20:06
crazypiggy

Цитата:
В cxGrid есть ячейка

В cxGrid нет ячеек. Ячейки есть в cxGridDBTableView, cxGridTableView и т.д.

Цитата:
ячейка cxGridPokazSCHPOK в которую можно вручную заносить цифры и она не привязана к dataset

А это как понимать? Есть cxGridDBColumn c незаполненным cxGridDBColumn.DataBinding.FieldName, или все-таки используете не DB-Aware View? Да, загадка!

Цитата:
Если закомментировать последнюю строку то в ячейку cxGridPokazSCHPOK я заношу цифры и они видны, а с последней строкой заношу одну цифру, происходит расчет но значения в ячейке не видно, а в cxGridPokazSCHVOLUME все правильно заносит. Как с этим бороться?


Код: TcxCustomEdit(Sender).PostEditValue;
cxGridPokazSCH.DataController.SetValue(cxGridPokazSCH.Controller.FocusedRowIndex, cxGridPokazSCHVOLUME.Index,SimpleRoundTo(Volume));
Автор: SIgor33
Дата сообщения: 20.01.2011 12:08
делаю следующие
FormLogica:=TFormLogica.Create(MainFormReport);
FormLogica.TvLogic.DataController.DataSource:=AQuery.DataSource;
FormLogica.TvLogic.DataController.RefreshExternalData;
FormLogica.ShowModal;
FormLogica.Free;
При этом данные во вьюхе не отображаются если же я дизайнере прописываю для TvLogic.DataController.DataSource датасет то все отображается может как-то по другому обновить данные можно.
Автор: X11
Дата сообщения: 20.01.2011 12:37

Цитата:
При этом данные во вьюхе не отображаются

а что конкретно отображается? Данные не отображаются или просто получается так, что вьюха не имеет привязанного датасета?


Цитата:
FormLogica.TvLogic.DataController.DataSource:=AQuery.DataSource;

а столбцы во вьюхе кто за тебя будет создавать?
Автор: marser
Дата сообщения: 20.01.2011 12:47
SIgor33

Цитата:
может как-то по другому обновить данные можно

Если в runtime FormLogica.TvLogic.DataController.DataSource присваиваете правельное значение, то все должно работать. После
FormLogica.TvLogic.DataController.DataSource:=AQuery.DataSource напишите
ShowMessage('DataSet.Name = ' + FormLogica.TvLogic.DataController.DataSource.DataSet.Name + #13#10 + 'Active = ' + BoolToStr(FormLogica.TvLogic.DataController.DataSource.DataSet.Active, True)
и помотрите что выведет

Добавлено:
X11

Цитата:
Дошло:

Код:

Код: Var
Item: TcxCustomGridTableItem;
begin
Item := TcxGridDBTableView(Sender).DataController.GetItemByFieldName('DELETED');
if VarSameValue(ARecord.Values[TcxGridDBColumn(Item).Index], TcxCheckBoxProperties(Item.Properties).ValueChecked)
then
AStyle := styleCliDeleted;
Автор: SIgor33
Дата сообщения: 20.01.2011 13:18
marser
Валится ошибка что FormLogica.TvLogic.DataController.DataSource типа nil
Может из за того что AQuery TMSQuery
хотя запрос отрабатывается может метод вызова поменять с execute на open
Автор: marser
Дата сообщения: 20.01.2011 13:26
SIgor33
Так как FormLogica.TvLogic.DataController.DataSource = nil, то и
Цитата:
данные во вьюхе не отображаются

Добавлено:
SIgor33
Я не знаком с TMSQuery, но думаю что, TMSQuery.DataSource это свойство для создания Master-Detail.
Автор: Vixoid
Дата сообщения: 20.01.2011 13:41

Код: FormLogica.TvLogic.DataController.DataSource:=AQuery.DataSource;
Автор: SIgor33
Дата сообщения: 20.01.2011 13:52
Vixoid

Цитата:
- вот тута ошибка!!!

Ошибка понятна откуда.
В качестве решения стал передавать параметром в процедуре сам датасоурс.
Но если кто-то что-то подскажет прислушаюсь
Автор: Vixoid
Дата сообщения: 20.01.2011 14:18
или Я чето не понял или...
стандартная цепочка: TMSConnection -> TMSQuery -> TMSDataSource (или TDataSource) дальше по желанию любой DBAware компонент... в твоем случае нету TMSDataSource компонента связанного с TMSQuery, а свойство DataSource у TMSQuery это чето другое походу, не ковырял!
Автор: JohnSilver182
Дата сообщения: 21.01.2011 11:35
Я мозки со стены стираю

Как записать в ..DbTableSummaryItem свое значение ????

cxGridTVOne.DataController.Summary.FooterSummaryItems.Items[1]
Автор: marser
Дата сообщения: 21.01.2011 11:54
JohnSilver182

Цитата:
Как записать в ..DbTableSummaryItem свое значение ????

Если нужно показать свое значение, то обработать событие
cxGridTVOne.DataController.Summary.FooterSummaryItems.Items[1].OnGetText
Автор: JohnSilver182
Дата сообщения: 21.01.2011 12:45
marser Спасибо .
Только вот это я сделал не очень элегантно ибо надо вводить Private переменную .
А есть еще способ без Private Var ??


Код: procedure TFormSprav.cxGridTVOneTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems1GetText(
Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean;
var AText: String);
begin
atext:=p_gnvp;
end;
Автор: CupperJJ
Дата сообщения: 21.01.2011 15:17
Здравствуйте. У меня следующая проблема.

Реализую отчеты по средством DevExpress Report.

В общем, в отчет в одно из полей нужно вставить формативаронный текст например как то так

Текст в разном формате

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

Как возможно перенести сей текст в какое нибудь поле в DexExpress сохраним при этом всю разметку (всмысле чтобы отображался не html код, а именно форматированный текст) ???

В данный момент реализован класс который частично реализует это но, делает он это совсем не привильно, каждый тег из html разметки вноситься в отдельное текстовое поле которые потом пихается в еще одно поле. Это работает для простых случаев. Для случая приведенного выше результат будет ужасен и совсем не то что ожидалось ))
Автор: kniazkinP
Дата сообщения: 21.01.2011 16:59
Доброго времени суток всем!! Меня интересует вот такая проблема - создал поле 1ое которое использую для работы с порядковым номером таблицы -
Код: procedure Tform1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if DataSource1.DataSet.RecNo > 0 then
begin
if Column.Title.Caption = 'No:' then
DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(DataSource1.DataSet.RecNo));
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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