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

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

Автор: G1zm0
Дата сообщения: 08.06.2011 17:20
Добавлено:

Цитата:
может это и мистика какая-то но я просто убрал
DataSet.BookMark:=GetSelectedBookMark(I);
все заработало как надо спасибо, а про Values. оно как-то все целиком хватает.

Пардон, обман, считает не корректно, оч хорошо считает одну выделенную запись, когда скопом, данные берет из воздуха
Автор: marser
Дата сообщения: 09.06.2011 07:17
G1zm0

Цитата:
Пардон, обман, считает не корректно

Я же Вам написал в какую сторону нужно смотреть.

Код: with cxGrid1DBTableView1.DataController do
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARecordIndex := GetRowInfo(ARowIndex).RecordIndex;
C := C + Values[ARecordIndex, <Column_SUM>.Index];
C1 := C1 + Values[ARecordIndex, <Column_Nalog>.Index];
end;
Автор: G1zm0
Дата сообщения: 09.06.2011 08:40
Master
чуть переделал куски, которые были на форуме


Код: var
I: Integer;
C,C1: Currency;
ARowIndex: Currency;
ARowInfo: TcxRowInfo;
begin
C:=0;
C1:=0;
.........................
with View0.dataController do
begin
beginupdate;
Screen.Cursor := crHourGlass;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(CurrToInt(ARowIndex));
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
C:=C+(Values[ARowInfo.RecordIndex, View0Sum.Index]);
C1:=C1+(Values[ARowInfo.RecordIndex,View0Nalog.Index]);
end;
end;
finally
endupdate;
Screen.Cursor := crDefault;
end;
end;
..................
Автор: AlexCoRu
Дата сообщения: 09.06.2011 12:15
У вьюхи грида установлено:

DataController.DataModeController.SmartRefresh := True;
DataController.DataModeController.SyncMode := True;
DataController.KeyFieldNames - определён.
Источник данных - TpFIBDataSet.

При перемещении с изменённой записи на другую - изменения сохраняются. Здесь правильно, как задумано.
При перемещении с новой записи (вставленой), в которой не делались изменения (пустой), запись не сохраняется. И это устраивает. А вот если внести изменения в новую запись и переместиться на другую, запись в DataSet сохраняется, но из грида пропадает. Непонятно, в какой момент сделать DataController.UpdateItems? Или как иначе надо делать?
Хотелось бы что б новая запись сохранялась при переходе на другую и отображалась в гриде.
Автор: marser
Дата сообщения: 09.06.2011 15:04
AlexCoRu

Код: А вот если внести изменения в новую запись и переместиться на другую, запись в DataSet сохраняется, но из грида пропадает.
Автор: irzyxa
Дата сообщения: 09.06.2011 15:29
Доброе время суток. Есть вопрос по cxVerticalGrid.
Создал свой класс эдитора на основе TcxButtonEditProperties, добавил в него всего одно свойство(строковое).
Строки в грид добавляю динамически. Все вроде хорошо, но вот как считать мое свойство при нажатии на кнопку(которая появляется при редакутировании строки). Процедура на онклик выглядит следующим образом

Код: procedure TForm1.RowButtonClick(
Sender: TObject; AButtonIndex: Integer);
var
PascalScript: String;
begin
inherited;
PascalScript := TMyButtonEditProperties(TcxEditorRow(<cxVerticalGrid>.FocusedRow).Properties.EditProperties).EditorPascalScript;
//остальной код
end;
Автор: marser
Дата сообщения: 09.06.2011 15:41
irzyxa
А если так
PascalScript := TMyButtonEditProperties(TcxButtonEdit(Sender).Properties).EditorPascalScript;
Автор: irzyxa
Дата сообщения: 09.06.2011 15:48
К сожалению нет. Поле пустое
Автор: marser
Дата сообщения: 09.06.2011 15:51
irzyxa
Я не совсем понял. Вы ограничились только созданием TMyButtonEditProperties? По идее и редактор TMyButtonEdit нужно создавать.
Автор: irzyxa
Дата сообщения: 09.06.2011 15:53
Функция добавления строк

Код: function CreatePropertyRow(Script:String):TcxEditorRow;
var
tmpRowClass: TcxCustomEditProperties;
begin
Result := TcxEditorRow(SerializerParams.Add(TcxEditorRow));
tmpRowClass := TMyButtonEditProperties.Create(Result);
if tmpRowClass is TMyButtonEditProperties then
begin
TMyButtonEditProperties(tmpRowClass)EditorPascalScript := Script;
TMyButtonEditProperties(tmpRowClass).OnButtonClick :=
RowButtonClick;
end;
Result.Properties.EditPropertiesClass := TcxCustomEditPropertiesClass(tmpRowClass.ClassType);
Result.Properties.EditProperties := tmpRowClass;
end;
Автор: marser
Дата сообщения: 09.06.2011 16:06
irzyxa
public метод
class function GetContainerClass: TcxContainerClass; override;
что возвращает? Догадываюсь что - TcxButtonEdit. А у TcxButtonEdit.PropertiesClass какой? TcxButtonEditProperties!
Еще раз повторяю: нужно писать редактор TMyButtonEdit, а GetContainerClass должен возвращать TMyButtonEdit.
Автор: irzyxa
Дата сообщения: 09.06.2011 17:30
Переделал класс и дописал новый Edit
TPascalScriptEditProperties = class(TcxButtonEditProperties)
private
FPascalScript: String;
public
class function GetContainerClass: TcxContainerClass; override;
property PascalScript: String read FPascalScript write FPascalScript;
end;

TPascalScriptEdit = class(TcxButtonEdit)
protected
function GetProperties: TPascalScriptEditProperties;
public
class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
property Properties: TPascalScriptEditProperties read GetProperties;
end;

Все равно пустое свойство
Автор: marser
Дата сообщения: 09.06.2011 17:42
irzyxa
Добавте в метод TPascalScriptEditProperties.Assign присваивание свойства PascalScript.
Обработчик RowButtonClick должен выглядить так: PascalScript := TPascalScriptEdit(Sender).Properties.PascalScript;


Добавлено:
irzyxa
Только зачем этот геморрой ради одного свойства?

Добавлено:
irzyxa

Цитата:

Код: function CreatePropertyRow(Script:String):TcxEditorRow;
var
tmpRowClass: TcxCustomEditProperties;
begin
Result := TcxEditorRow(SerializerParams.Add(TcxEditorRow));
tmpRowClass := TMyButtonEditProperties.Create(Result);
if tmpRowClass is TMyButtonEditProperties then
begin
TMyButtonEditProperties(tmpRowClass)EditorPascalScript := Script;
TMyButtonEditProperties(tmpRowClass).OnButtonClick :=
RowButtonClick;
end;
Result.Properties.EditPropertiesClass := TcxCustomEditPropertiesClass(tmpRowClass.ClassType);
Result.Properties.EditProperties := tmpRowClass;
end;
Автор: irzyxa
Дата сообщения: 10.06.2011 09:53
Урааааа!!! Добавление Assigne помогло, все заработало. marser огромное спасибо
Автор: drABT
Дата сообщения: 10.06.2011 12:04
Доброго времени суток!
Подскажите путь решения, как и можно ли средствами cxScheduler отобразить подписи к Event ? примерно как на рисунке ниже, отдельным столбцом.

http://img834.imageshack.us/img834/1500/gantta.jpg
Автор: mdid
Дата сообщения: 15.06.2011 15:03
драсте..хелп плиз с cxHintStyleController1
не знаю связано ли или нет но..
есть главная форма..остальные создаются по такому принципу

Код:
if not Modal then begin
Windows.SetParent(TForm(NewForms[length(NewForms)-1].Form).Handle, MainF.Handle);
TForm(NewForms[length(NewForms)-1].Form).Show
end
else
TForm(NewForms[length(NewForms)-1].Form).ShowModal;
Автор: crazypiggy
Дата сообщения: 15.06.2011 23:42
Доброй ночи. У меня такой вопрос. Есть cxGrid в котором имеются Master TableView и Detail TableView связанный с мастером по полям MasterKeyFields и DetailKeyfields. Не подскажите как мне сумму по полю в DetailTableView запихнуть в ячейку MasterTableview. Получить сумму в MasterDataset не могу т.к. запрос в DetailDataset занимает некоторое время и если я в MasterDataset буду получать эту сумму, то отчет будет формироваться слишком долго. Нет ли какой нибудь возможности взять сумму из DetalTableView и вставить в MasterTableView?
И исчо, не дадите мне ссылку на пример программы по работе со скинами в DevExpress
Автор: mdid
Дата сообщения: 16.06.2011 08:47
crazypiggy
линк на dll со скинами в шапке..правда у меня когда я качал так и не получилось с ним работать
Автор: X11
Дата сообщения: 17.06.2011 11:50
Нужно использовать цветной cxGrid.

Закрашиваю строки разными цветами в свойстве OnCustomDrawCell.
Но проблема проявляется при печати. На печать выводятся неокрашенные строки.
Знаю, что нужно использовать cxStyle чтобы на печать попало то, что видно на экране. Но цветов может быть много разных. Пользователь не ограничен в выборе количества цветов.

Не создавать же для каждого цвета новый стиль...
Автор: HunterNS
Дата сообщения: 20.06.2011 12:07
Здравствуйте, подскажите, пожалуйста, как сделать так, чтобы в VerticalGrid можно было перемещаться по ячейкам при помощи стрелок на клавиатуре?

Что интересно в демке к VerticalGrid можно перемещаться стрелками.
Я уже все свойства перепроверял, заново создавал компонент.
Изучал исходники демки, так и не понял, где собака зарыта. (В скомпилированной мной демке тоже получается перемещаться стрелками). Может дело не в гриде, а в датасете? У меня компоненты DOA, в демке ADO. Свойства датасетов (моего и с демки) "впринципе" схожи.

Помогите, уже не знаю, что делать...




Цитата:
Не создавать же для каждого цвета новый стиль...

X11, что вам мешает сделать один стиль и в нем менять свойство Color
Автор: X11
Дата сообщения: 20.06.2011 12:47

Цитата:
Не создавать же для каждого цвета новый стиль...

X11, что вам мешает сделать один стиль и в нем менять свойство Color


не проблема, но если я буду менять цвет у одного и того же стиля, то не будет ли это влиять на все ячейки одновременно?

Добавлено:

Цитата:
Здравствуйте, подскажите, пожалуйста, как сделать так, чтобы в VerticalGrid можно было перемещаться по ячейкам при помощи стрелок на клавиатуре?

Что интересно в демке к VerticalGrid можно перемещаться стрелками.
Я уже все свойства перепроверял, заново создавал компонент.


никаких свойств не надо трогать и так должно всё работать
Автор: vikkat
Дата сообщения: 20.06.2011 12:55
Добрый день! Есть cxGrid, связанный с TMSQuery/ Одна из его колонок - типа LookupComboBox, смотрящий на другую TMSQuery. Подскажите, пожалуйста, каким (проверенным) образом можно сделать эту LookupComboBox-ячейку то редактируемой, то нередактируемой, в зависимости от значения другой колонки данного грида ? Нужно, чтоб при клике на колонку в одних случаях раскрывался список значений, в др. случаях - нет (т.е. редактирование запрещалось - хочется, чтоб при невозможности редактирования кнопка для dropdown в ячейке вообще не появлялась). Обрабатываю OnCellClick вьюшки (если кликнута нужная колонка) Вариант Editing := false (true) для колонки не работает почему-то - при любых обстоятельствах кнопка dropdown появляется и вываливает список. Если запрещаю редактирование всей вьюшке (Sender - в этом обработчике), то вообще программа падает. Помогите, пожалуйста, господа!
С уважением.
Автор: HunterNS
Дата сообщения: 20.06.2011 13:00

Цитата:
не проблема, но если я буду менять цвет у одного и того же стиля, то не будет ли это влиять на все ячейки одновременно?

Будет. Я видимо неправильно понял вопрос.


Цитата:
никаких свойств не надо трогать и так должно всё работать

В том-то и дело, что не работает. У меня есть несколько предположений, но вроде бы я их все перепроверял, оказалось не в них проблема.
Особенности моего грида:
- Разные EditProperties у строчек (может быть просто текст, может быть CheckBox или LookupComboBox) (но ведь в демке тоже самое)
- Свойство Edit у Датасета True (в демке тоже)
- у меня свой обработчик Post (пробовал отключать)
- Поля ДатаСета имеют русские названия (пробовал на другом датасете)
- Использую DOA, может быть у него с ним проблемы. (Свойства у датасета ставил по-умолчанию)
- возможно у меня сложный запрос в ДатаСете, или нету ключевого поля.

Пробовал обрабатывать событие OnKeyDown у ВертикалГрида, не получается, не отлавливает. Такое ощущение, что у грида теряется фокус при нажатии на стрелки.
Автор: BlackVetal
Дата сообщения: 21.06.2011 06:18
X11
У грида (или вьюшке не помню точно) есть такие собтия RowStyle и RowCellStyle. В них можно менять цвет и другое. единственные момент - событие срабатывает постоянно при изменении контрола Grid (перемещение курсора, редактирование и т.д.)HunterNS

HunterNS
Одно из предположенй - так как у вас разные редакторы посмотрите свойство "AutoComplite" (=true должно быть)

vikkat
Попробуйте использовать событие "ShowingEditor" у "gridView" - ставите "e.Cancel" в нужное значение - редактор будет либо открываться или скрываться в зависемости от условия.
Автор: vikkat
Дата сообщения: 21.06.2011 07:59
А мы об одном и том же компоненте говорим? У меня cxGrid. У его вьюшки я не нашла события ShowingEditor - ни в дизайне, ни в рантайме. И вроде ничего похожего по смыслу ((
Автор: BlackVetal
Дата сообщения: 21.06.2011 08:38
vikkat
Об одном и том же, только я говорю про DevExpress на C# ... возможно это событие называется по другому под Delphi ...
Автор: marser
Дата сообщения: 21.06.2011 08:50
vikkat
Используйте событие OnEditing. Например, разрешить редактирование cxGrid1TableView1Column2, если значение в cxGrid1TableView1Column1 равно 2:

Код: procedure TForm1.cxGrid1TableView1Editing(Sender: TcxCustomGridTableView;
AItem: TcxCustomGridTableItem; var AAllow: Boolean);
begin
if AItem = cxGrid1TableView1Column2 then
AAllow := cxGrid1TableView1Column1.EditValue = 2;
end;
Автор: X11
Дата сообщения: 21.06.2011 09:14

Цитата:
У грида (или вьюшке не помню точно) есть такие собтия RowStyle и RowCellStyle.

1. И на печать пойдет реальный цвет строки?
2. Нужно ли применять там стили?

(дельфи щас нет под рукой)
Автор: BlackVetal
Дата сообщения: 21.06.2011 09:29
X11
Дико извиняюс - не сначала прочитал - я думал что у вас проблема с раскраской грида ... с печатью не эксперементировал ... здесь мой предложение не годится.
Автор: HunterNS
Дата сообщения: 22.06.2011 15:55
BlackVetal

Цитата:
Одно из предположенй - так как у вас разные редакторы посмотрите свойство "AutoComplite" (=true должно быть)

У какого объекта и где выставляется это свойство. (Я пишу на Delphi)
Если вы имели ввиду ImmediatePost, то я пробовал выставлять в True - не помогло.

X11

Цитата:
никаких свойств не надо трогать и так должно всё работать

Пробовал полностью новый VerticalGrid, ADOConnection, Таблицу. (Все настройки по-умолчанию, не сработало)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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