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

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

Автор: X11
Дата сообщения: 10.11.2010 12:47

Цитата:
Не срабатывает когда вы кликаете на кнопку? Редактирование грида/поля разрешено?

Да, уже разрешил. Жаль, что нельзя с OptionsData.Editing := False

Как узнать в событии нажатия на кнопку, на какой колонке был клик?
Автор: f3ka
Дата сообщения: 10.11.2010 13:19
X11
может <YourGridTableView>.Controller.EditingController.EditingItem?
Автор: X11
Дата сообщения: 10.11.2010 13:22
А относительно кнопки, получается, нельзя?

Добавлено:
Просто если я включаю режим редактирования OptionsData.Editing := True, то двойной клик по гриду не срабатывает.
Т.е. приходится выбирать между рабочим даблкликом или рабочими кнопками.
Автор: vladman
Дата сообщения: 10.11.2010 17:16
X11

Цитата:
Да, уже разрешил. Жаль, что нельзя с OptionsData.Editing := False

Можно.

Код: procedure <YourForm.<YourcxGridDBTableView>MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y:
Integer);
var
Ht: TcxCustomGridHitTest;
P: TPoint;
R : TRect;
begin
GetCursorPos(P);
P := TcxGridSite(Sender).ScreenToClient(P);
Ht := TcxGridSite(Sender).Viewinfo.GetHitTest(P);
If (Ht is TcxGridRecordCellHitTest) and
(TcxGridRecordCellHitTest(Ht).Item.Properties is TcxButtonEditProperties) then
with TcxGridTableDataCellViewInfo(TcxGridRecordCellHitTest(Ht).ViewInfo) do
begin
R := TcxEditButtonViewInfo(TcxCustomEditViewInfo(EditViewInfo).ButtonsInfo[0]).Bounds;
if PtInRect(R, Point(X, Y)) then
begin
TcxCustomEditViewInfo(EditViewInfo).ButtonsInfo[0].Data.State := ebsPressed;
cxGrid1DBTableView1.Site.InvalidateRect(R,False);
TcxButtonEditProperties(EditViewInfo.EditProperties).OnButtonClick(Sender,0);
end;
end;
end;
Автор: ChaserTheBest
Дата сообщения: 11.11.2010 15:47
Установил quantumgrid 7. В гриде у одного поля указываю Properties - TextEdit чтобы вводить однострочный текст. Запускаю программу - в этом поле написано (MEMO) и редактировать это поле нельзя. ReadOnly - false.
Если в Properties ничего не указывать, то при запуске программы в этом поле отображается то, что реально ввели, и можно редактировать, но мне надо установить ограничение на длину строки и текст должен быть однострочным.
что делать?
Автор: bossi4ek
Дата сообщения: 11.11.2010 16:29
Добрый день.

Возникла проблемка с cxgrid. Подскажите как программно добавлять строки у вложенную таблицу ... ?????

Что бы при нажатии на "+" открывалась такая же табл. только вложенная с определенным количеством строк.
Автор: vladman
Дата сообщения: 11.11.2010 23:41
bossi4ek

Цитата:
Что бы при нажатии на "+" открывалась такая же табл. только вложенная с определенным количеством строк.

нарисуйте что вы хотите, а то не понятно что такое
Цитата:
добавлять строки у вложенную таблицу

Автор: ChaserTheBest
Дата сообщения: 12.11.2010 14:14

Цитата:
Установил quantumgrid 7. В гриде у одного поля указываю Properties - TextEdit чтобы вводить однострочный текст. Запускаю программу - в этом поле написано (MEMO) и редактировать это поле нельзя. ReadOnly - false.
Если в Properties ничего не указывать, то при запуске программы в этом поле отображается то, что реально ввели, и можно редактировать, но мне надо установить ограничение на длину строки и текст должен быть однострочным.
что делать?

база - sqlite. может из-за этого что-то?
Автор: Andryshok
Дата сообщения: 12.11.2010 14:22
bossi4ekСоздать еще один level в cxGrid и привязать его к датасету, причем указать в cxGrid поля для свзи.
P.S. Строки нужно добавлять не в грид, а в датасет, возможно у вас какой нибудь мемори дата. + гляньте сэмплы девэпресс и все поймете


Добавлено:
ChaserTheBest Создайте в базе sql lite поле с типом string, а не text и не будет у вас memo, или varchar и задайте его длину, а вообще рекомендую вам почитать про sql lite, сам недавно начал ее пользовать - в ней много особенностей
Автор: ChaserTheBest
Дата сообщения: 12.11.2010 14:37

Цитата:
ChaserTheBest Создайте в базе sql lite поле с типом string, а не text и не будет у вас memo, или varchar и задайте его длину, а вообще рекомендую вам почитать про sql lite, сам недавно начал ее пользовать - в ней много особенностей

да в нем типов-то 4 штуки только. для текста только TEXT подходит
http://www.sqlite.org/datatype3.html
Автор: Andryshok
Дата сообщения: 12.11.2010 14:48
ChaserTheBest
Вот вам для размышления
1. http://www.sql.ru/forum/actualthread.aspx?tid=413363
2. http://www.phpclub.ru/detail/article/sqlight
Почитайте внимательно
Автор: JohnSilver182
Дата сообщения: 13.11.2010 21:45
Hi
А вот по умолчание в cxGrid текущяя ячейка выделена контуром , остальные синим фоном . А как Инвертировать этот стиль ??
Автор: bossi4ek
Дата сообщения: 13.11.2010 22:35
Andryshok Спс .... С этим разобрался, вот только теперь не могу понять почему отображается только одна запись в 2 левеле ... хотя там есть несколько записей с одинаковым значением в поле, по котором связаны левела ... ????
Автор: vladman
Дата сообщения: 13.11.2010 23:06
JohnSilver182

Цитата:
А вот по умолчание в cxGrid текущяя ячейка выделена контуром , остальные синим фоном . А как Инвертировать этот стиль ??

А попробовать <Your>cxGridDBTableView.OptionsSelection.InvertSelect := False;

Добавлено:
bossi4ek

Цитата:
вот только теперь не могу понять почему отображается только одна запись в 2 левеле ... хотя там есть несколько записей с одинаковым значением в поле, по котором связаны левела ... ????

Сделайте ORDER BY по внешнему ключу-связке в датасете для второго левела.
Автор: bossi4ek
Дата сообщения: 13.11.2010 23:25

Цитата:
Сделайте ORDER BY по внешнему ключу-связке в датасете для второго левела.


Данные беру не с БД, а с dxMemData ... или может я не так понял ? ... где это сделать ????
Автор: vladman
Дата сообщения: 14.11.2010 00:07
bossi4ek

Цитата:
Данные беру не с БД, а с dxMemData

Поле, по которому идет связка второго уровня с первым отсортируйте, т.е. установите свойство <Your>dxMemData.SortedField
Автор: bossi4ek
Дата сообщения: 14.11.2010 00:30
vladman Спс, помогло ... теперь буду знать )
Автор: JohnSilver182
Дата сообщения: 15.11.2010 12:17
vladman - Шаман !!!


Добавлено:
А вот инкрементный поиск в cxGrid всегда показывает искомую строку Внизу экрана . А можно это как переделать ?? Вверху например .....
Автор: MagistrAnatol
Дата сообщения: 15.11.2010 15:28
Господа толкните идею - есть мастер-детал таблицы:
select f1,f2 from table1 - мастер
select f3,f4 from table2 where f4=:f2 детал
но при таком построении запросов в гриде видны детал записи только текущей строки мастера, чтобы были видны все детайл записи всех мастеров надо в запросе для детайл таблицы убрать условие where f4=:f2 у мастер - детал строить через грид - не проблема - но !!!! при таком запросе select f3,f4 from table2 при добавлении новой записи в с связку мастер-детайл не через грид , а через модальную форму с дб контролами для мастера и детал грид я вижу все записи детайл таблицы? ((
Использую фибсы - автокомит отключен( просьба не предлагать включить и все будет норм.)
Пробывал задать фильтр для детайл таблицы по ключевому полю мастера - почему-то не добавляются записи в детал таблицу
Как быть? точнее что делать чтобы не видеть всех записей детайла?

Добавлено:
да, и ещо я использую генератор для нового значения поля, как при вставке новой записи увидеть ето знечение в cxTextDBEdit ?
Автор: vladman
Дата сообщения: 15.11.2010 22:09
MagistrAnatol

Цитата:
Господа толкните идею - есть мастер-детал таблицы:

Цитата:
...а через модальную форму с дб контролами для мастера и детал грид я вижу все записи детайл таблицы?

Где вы видите эти все записи? В модальной форме?
А причем тут автокоммит? Как без коммита транзакции ваш грид вообще будет знать о добавлении новой записи, тем более через модальную форму с дб контролами?

Добавлено:
MagistrAnatol

Цитата:
использую генератор для нового значения поля, как при вставке новой записи увидеть ето знечение в cxTextDBEdit ?

Как вариант, воспользоваться методом TFIBDatabase.Gen_Id(const GeneratorName: string; Step: Int64; aTransaction: TFIBTransaction = nil): Int64.
Например:

Код: procedure <YourForm.<YourDataSet>NewRecord(DataSet: TDataSet);
begin
<YourDataSet>['<YourPrimaryKeyFieldName>'].AsInteger := <Your>Database.Gen_Id('YourPrimaryKeyField_GEN_ID', 1);
end;
Автор: vladman
Дата сообщения: 16.11.2010 01:14
JohnSilver182

Цитата:
А можно это как переделать ?? Вверху например .....

Можно, например так для "вверху"

Код: procedure <You>Form.<Your>GridTableViewFocusedRecordChanged(Sender: TcxCustomGridTableView;
APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
begin
if Sender.Controller.IsIncSearching then
if AFocusedRecord.Index > 0 then Sender.Controller.TopRecordIndex := AFocusedRecord.Index - 1
else Sender.Controller.TopRecordIndex := AFocusedRecord.Index;
end;
Автор: MagistrAnatol
Дата сообщения: 16.11.2010 08:50
vladman

Цитата:
Где вы видите эти все записи? В модальной форме?

да, уже разобрался - неверно использовал фильтр

Цитата:
Как без коммита транзакции ваш грид вообще будет знать о добавлении новой записи

При добавлении новой записи она отражается и в гриде главного окна, даже при редактировании через дб контролы в модальной форме, а комит лиш подтверждает добавление

Добавлено:
Немного глупая задача - как заставить грид не обновлять данные?
Автор: vladman
Дата сообщения: 16.11.2010 10:13
MagistrAnatol

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

Ну да, если и грид и контролы опираются на один DataSource-DataSet.
Цитата:
Немного глупая задача - как заставить грид не обновлять данные?

Посмотрите в сторону TcxDBDataModeController.SmartRefresh.
Автор: vcrank
Дата сообщения: 17.11.2010 06:58
Здравствуйте.
Не получается настроить cxGrid для корректной работы с отношением Master-Detail (раньше как-то настраивал)
Имеется сервер с MySQL (из набора Denwer). В базе на данный момент всего 2 таблицы.
В Delphi 7 для подключения к серверу MySQL использую компоненты UniDAC. Кинул на форму UniConnection, провайдер MySQL, две штуки UniTable и UniDataSource. В UniTable Настроил связь между таблиц


В cxGrid создал 2 уровня и соотвественно 2 представления таблиц. Слинковал каждую таблицу с нужным UniDataSource. В свойствах таблиц указал следующее (на всякий случай скажу, что M в начале имени поля это Master, а D - Detail (ваш К.О. )) :


Если я кликаю на нужной записи, разворачиваю её детальное представление, то сколько бы ни было записей в детальной таблице выделить/отредактировать я могу только одну.
Решил проверить такое поведение с обычными таблицами (DBGrid) - там всё нормально: в верхнем гриде выбираю запись, в нижнем могу отредактировать любую детальную


Пробовал дополнительно настроить связь таблиц в самой базе, но результат остался прежним



Версия UniDAC 3.0.0.0.7
DevExpress 53
Автор: marser
Дата сообщения: 17.11.2010 07:08
vcrank
А что в DataController.DataModeController.DetailInSQLMode стоит?

Добавлено:
У Вас запрос в Detail таблице для работы в DataController.DataModeController.DetailInSQLMode := True
Автор: Vixoid
Дата сообщения: 17.11.2010 07:26
vcrank

Цитата:
то сколько бы ни было записей в детальной таблице выделить/отредактировать я могу только одну
- ага, и только первую???
в мастере, в твоем случае cxGrid1DBTableView1 в DataController заполни только поле KeyFieldNames, а у дочернего заполни только DetailKeyFieldNames и MasterKeyFieldNames! И зря ты в таблицах настроил связь!
Автор: vcrank
Дата сообщения: 17.11.2010 07:46
marser


Цитата:
А что в DataController.DataModeController.DetailInSQLMode стоит?



Цитата:
У Вас запрос в Detail таблице для работы в DataController.DataModeController.DetailInSQLMode := True

Просто решил проверить.. выставил это свойство у детальной таблицы в True - при выполнении программы вывалилось сообщение об ошибке, что параметр DID не найден

У меня почти все свойства стоят по дефолту.


Vixoid

Цитата:
ага, и только первую???

Да, либо только свежедобавленную

Убрал связь между UniTable

Теперь почему-то отображается только одна запись и отсутствует возможность добавить данные


Если вернуть связь (в UniTable), то отображаются все детальные данные, но возможности редактирования по прежнему нет
Автор: Vixoid
Дата сообщения: 17.11.2010 08:49
vcrank
Я не знаю как у тебя таблицы спроектированы и какая логика, но опираясь на SDAC скажу, уникальный ключ (PK) должен быть в любой таблице, глядя на картинку не вижу у дочерней таблицы PK, а только FK!
п.с. с таблицами не работю только с Query, так что могу быть не прав!
Автор: vcrank
Дата сообщения: 17.11.2010 09:05

Цитата:
глядя на картинку не вижу у дочерней таблицы PK, а только FK!

Спасибо. Кажется это помогло
Автор: JohnSilver182
Дата сообщения: 17.11.2010 09:08
А у меня прикол с TdxDockPanel (DevExpress v47). Когда выводиться окно

Код: dxDockPanelWeb.Visible:=true;
dxDockPanelWeb.SetFocus;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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