Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Компонента TcxDBVerticalGrid привязана к НД TpFibDataSet и используется просто для вывода данных на экран, для отображения данных.

Но появилась нужда добавить 1-2 строки TcxDBEditorRow и заполнить их не из привязанного НД.
Создать строку типа cxCombobox или cxTextEdit не проблема, но получается так, что в cxCombobox ничего выбрать нельзя, а в cxTextEdit ничего ввести нельзя ни ручками, ни программно.

А очень хочется.

P.S. Можно, конечно, заменить сетку на TcxVerticalGrid,но тогда придется все строки заполнять ручками в коде, а мне - леньки
13 ноя 20, 14:21    [22231419]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
Polesov
Member

Откуда:
Сообщений: 790
X11,
Вычисляемые поля в DataSet
13 ноя 20, 14:52    [22231446]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
И как мне это поможет?
13 ноя 20, 14:56    [22231448]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
Polesov
Member

Откуда:
Сообщений: 790
X11, в событии OnCalcFields датасета этим полям можно присвоить значение.
13 ноя 20, 15:55    [22231487]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Я пока по другому сделал.
В строку добавил выпадающую панель и там уже пусть пользователь что-то меняет.
13 ноя 20, 16:01    [22231501]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
Polesov
X11,
Вычисляемые поля в DataSet

Ему нужны "вычисляемые строки", а не поля.
13 ноя 20, 17:23    [22231586]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
строки в данном случае - это поля, ведь это вертикальная сетка
13 ноя 20, 17:28    [22231588]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1350
X11,

тогда он прав.
13 ноя 20, 17:34    [22231598]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
DimaBr
Member

Откуда:
Сообщений: 11910
X11
P.S. Можно, конечно, заменить сетку на TcxVerticalGrid,но тогда придется все строки заполнять ручками в коде, а мне - леньки

Что стоит Единожды написать процедуру, заполняющую Грид по НАИМЕНОВАНИЮ колонок из Датасета ?
13 ноя 20, 22:10    [22231759]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 1159
Не стоит использовать этот вертикальный грид для показа одной строки данных, он для этого не предназначен как нам сказали. Оказывается мы его неправильно используем, он для отображения сразу многих записей :)
Т.е отобразить он конечно отобразит, но при обновлении единственной отображаемой строки данных тормозить будет беспощадно.
14 ноя 20, 09:11    [22231915]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
вертикальная сетка довольно удобна для формы редактирования/добавления/показа записи из базы
14 ноя 20, 10:21    [22231925]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1085
Вопрос в том, надо просто отображать пользователю данные или надо еще их редактировать? Если просто отображать, то что может быть проще OnGetDisplayText Editor'а:
procedure TForm.EditorPropertiesGetDisplayText(Sender: TcxCustomEditorRowProperties; ARecord: Integer; var AText: string);
  Var
        X, Y, M: integer;
begin
      { Получаем данные для отображения }         
           X := 2;
           Y := 2;
           M := X * Y;         
    
      { Выводим } 
           AText := Format('%d умножить на %d равно %d!', [X, Y, M]);
end;

Properties = Label, FieldName пустое.
14 ноя 20, 13:57    [22232033]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Непонятно, как это событие работает, как его правильно использовать, в какие моменты. При открытии формы, при перерисовке... когда оно срабатывает?
Ок, сделал строку с выпадающим списком (TcxLookupComboBox) и привязал к НД, выбираю там что-то, но строка пустая, пока она активна, в режиме редактирования. Как только фокус покидает ячейку, вижу результат выбора. Как только щелкаю туда - снова пустая.

Для выбора использую событие EditPropertiesCloseUp, где назначаю выбранное значение глобальной переменной. А потом эту глобальную переменную использую в PropertiesGetDisplayText.


К сообщению приложен файл. Размер - 6Kb
15 ноя 20, 15:21    [22232369]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1085
X11
Непонятно, как это событие работает, как его правильно использовать, в какие моменты. При открытии формы, при перерисовке... когда оно срабатывает?
Коллега, у вас отладчик не работает? Или религия не позволяет использовать? Создайте точку останова и всё узнаете.

Вообще я в таких случаях делаю очень прямолинейно и просто - создаю два вертикальных грида. Один DB, второй обычный. В DB-гриде отображаю данные из датасета (чтобы руками не прописывать), а второй обычный грид кидаю на форму ниже, под DB-гридом, прямо вплотную, чтобы оба грида составляли как бы одно целое. Для пользователя внешне это будет выглядеть как один вертикальный грид.
Но это работает только в том случае, разумеется, если отображаемые данные и редактируемые данные можно расположить последовательно. Если редактируемые строчки надо вклинить между данными из БД, то этот вариант не подойдёт.
15 ноя 20, 15:41    [22232376]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Работает и пользуюсь, и вижу, что переменной выбранное в списке значение присваивается, только вот не отображается, пока не выйдешь из режима редактирования.
Как только снова щелкаю по строке (по ячейке), значение снова исчезает.
15 ноя 20, 15:43    [22232379]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Две сетки мне не подходит.
Мой пользователь имеет доступ к редактированию визуально части сетки. Т.е. это кагбэ дизайнер формы.
Поэтому вот.
15 ноя 20, 15:44    [22232381]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1085
X11
Ок, сделал строку с выпадающим списком (TcxLookupComboBox) и привязал к НД, выбираю там что-то, но строка пустая, пока она активна, в режиме редактирования. Как только фокус покидает ячейку, вижу результат выбора. Как только щелкаю туда - снова пустая.
Коллега, вы троллите что ли? Ничего не пропадает, если Properties->DataBinding->FieldName задано корректно.
15 ноя 20, 16:02    [22232385]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Перечитайте ТЗ с самого начала. Намекну, что у меня в этой одной строке нет привязки к НД.
15 ноя 20, 16:13    [22232391]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1085
X11
Перечитайте ТЗ с самого начала. Намекну, что у меня в этой одной строке нет привязки к НД.
А это кто писал:
X11
сделал строку с выпадающим списком (TcxLookupComboBox) и привязал к НД

Но даже если нет привязки, можно создать фиктивное поле в результате запроса и привязаться к нему. Не знаю, правда, как к этому отнесётся Fib, но проверить можно.
15 ноя 20, 16:26    [22232395]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Вы не поняли, это список (ListSource) привязан, т.к. источник отображения списка.
А свойство FieldName пустое.

К сообщению приложен файл. Размер - 13Kb
15 ноя 20, 16:35    [22232396]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
В общем, решение пока такое, но не очень, после выбора значения из TcxLookupComboBox, в событии EditPropertiesCloseUp добавил строку

cxDBVerticalGrid1.HideEdit;


Сообщение было отредактировано: 15 ноя 20, 16:57
15 ноя 20, 17:02    [22232401]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1085
X11
Вы не поняли, это список (ListSource) привязан, т.к. источник отображения списка.
А свойство FieldName пустое.
Я всё прекрасно понял. Именно поэтому я и предложил присвоить свойству FieldName значение фиктивного поля из вашего TpFibDataSet.
15 ноя 20, 17:05    [22232402]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Возвращаюсь к нашим баранам. НД только для отображения. Поэтому он всегда ReadOnly, т.е. при попытке что-то присвоить полю, будет exception - dataset not in isert or edit mode.
15 ноя 20, 17:09    [22232403]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1085
X11
Возвращаюсь к нашим баранам. НД только для отображения. Поэтому он всегда ReadOnly, т.е. при попытке что-то присвоить полю, будет exception - dataset not in isert or edit mode.
Всегда ReadOnly - это не аксиома. У FibDataSet есть LocalUpdate, по-моему. Можно его включать. Но вообще лучше всего использовать Calculated Fields, как сразу вам и сказали.
15 ноя 20, 17:58    [22232411]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Именно с Calculated Fields я и экспериментировал и получил ошибку, вышеуказанную.
15 ноя 20, 17:59    [22232412]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить