powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
31 сообщений из 31, показаны все 2 страниц
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40017923
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Компонента TcxDBVerticalGrid привязана к НД TpFibDataSet и используется просто для вывода данных на экран, для отображения данных.

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

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

P.S. Можно, конечно, заменить сетку на TcxVerticalGrid,но тогда придется все строки заполнять ручками в коде, а мне - леньки
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40017944
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,
Вычисляемые поля в DataSet
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40017945
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как мне это поможет?
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40017972
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11, в событии OnCalcFields датасета этим полям можно присвоить значение.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40017983
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока по другому сделал.
В строку добавил выпадающую панель и там уже пусть пользователь что-то меняет.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018044
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Polesov
X11,
Вычисляемые поля в DataSet

Ему нужны "вычисляемые строки", а не поля.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018046
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
строки в данном случае - это поля, ведь это вертикальная сетка
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018053
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11,

тогда он прав.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018135
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
P.S. Можно, конечно, заменить сетку на TcxVerticalGrid,но тогда придется все строки заполнять ручками в коде, а мне - леньки

Что стоит Единожды написать процедуру, заполняющую Грид по НАИМЕНОВАНИЮ колонок из Датасета ?
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018238
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не стоит использовать этот вертикальный грид для показа одной строки данных, он для этого не предназначен как нам сказали. Оказывается мы его неправильно используем, он для отображения сразу многих записей :)
Т.е отобразить он конечно отобразит, но при обновлении единственной отображаемой строки данных тормозить будет беспощадно.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018246
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вертикальная сетка довольно удобна для формы редактирования/добавления/показа записи из базы
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018303
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в том, надо просто отображать пользователю данные или надо еще их редактировать? Если просто отображать, то что может быть проще OnGetDisplayText Editor'а:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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 пустое.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018510
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно, как это событие работает, как его правильно использовать, в какие моменты. При открытии формы, при перерисовке... когда оно срабатывает?
Ок, сделал строку с выпадающим списком (TcxLookupComboBox) и привязал к НД, выбираю там что-то, но строка пустая, пока она активна, в режиме редактирования. Как только фокус покидает ячейку, вижу результат выбора. Как только щелкаю туда - снова пустая.

Для выбора использую событие EditPropertiesCloseUp, где назначаю выбранное значение глобальной переменной. А потом эту глобальную переменную использую в PropertiesGetDisplayText.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018517
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Непонятно, как это событие работает, как его правильно использовать, в какие моменты. При открытии формы, при перерисовке... когда оно срабатывает?
Коллега, у вас отладчик не работает? Или религия не позволяет использовать? Создайте точку останова и всё узнаете.

Вообще я в таких случаях делаю очень прямолинейно и просто - создаю два вертикальных грида. Один DB, второй обычный. В DB-гриде отображаю данные из датасета (чтобы руками не прописывать), а второй обычный грид кидаю на форму ниже, под DB-гридом, прямо вплотную, чтобы оба грида составляли как бы одно целое. Для пользователя внешне это будет выглядеть как один вертикальный грид.
Но это работает только в том случае, разумеется, если отображаемые данные и редактируемые данные можно расположить последовательно. Если редактируемые строчки надо вклинить между данными из БД, то этот вариант не подойдёт.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018520
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает и пользуюсь, и вижу, что переменной выбранное в списке значение присваивается, только вот не отображается, пока не выйдешь из режима редактирования.
Как только снова щелкаю по строке (по ячейке), значение снова исчезает.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018522
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Две сетки мне не подходит.
Мой пользователь имеет доступ к редактированию визуально части сетки. Т.е. это кагбэ дизайнер формы.
Поэтому вот.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018525
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Ок, сделал строку с выпадающим списком (TcxLookupComboBox) и привязал к НД, выбираю там что-то, но строка пустая, пока она активна, в режиме редактирования. Как только фокус покидает ячейку, вижу результат выбора. Как только щелкаю туда - снова пустая.
Коллега, вы троллите что ли? Ничего не пропадает, если Properties->DataBinding->FieldName задано корректно.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018529
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перечитайте ТЗ с самого начала. Намекну, что у меня в этой одной строке нет привязки к НД.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018532
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Перечитайте ТЗ с самого начала. Намекну, что у меня в этой одной строке нет привязки к НД.
А это кто писал:X11сделал строку с выпадающим списком (TcxLookupComboBox) и привязал к НД
Но даже если нет привязки, можно создать фиктивное поле в результате запроса и привязаться к нему. Не знаю, правда, как к этому отнесётся Fib, но проверить можно.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018533
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не поняли, это список (ListSource) привязан, т.к. источник отображения списка.
А свойство FieldName пустое.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018537
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, решение пока такое, но не очень, после выбора значения из TcxLookupComboBox, в событии EditPropertiesCloseUp добавил строку

Код: pascal
1.
cxDBVerticalGrid1.HideEdit;
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018538
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Вы не поняли, это список (ListSource) привязан, т.к. источник отображения списка.
А свойство FieldName пустое.
Я всё прекрасно понял. Именно поэтому я и предложил присвоить свойству FieldName значение фиктивного поля из вашего TpFibDataSet.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018539
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращаюсь к нашим баранам. НД только для отображения. Поэтому он всегда ReadOnly, т.е. при попытке что-то присвоить полю, будет exception - dataset not in isert or edit mode.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018546
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Возвращаюсь к нашим баранам. НД только для отображения. Поэтому он всегда ReadOnly, т.е. при попытке что-то присвоить полю, будет exception - dataset not in isert or edit mode.
Всегда ReadOnly - это не аксиома. У FibDataSet есть LocalUpdate, по-моему. Можно его включать. Но вообще лучше всего использовать Calculated Fields, как сразу вам и сказали.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018547
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно с Calculated Fields я и экспериментировал и получил ошибку, вышеуказанную.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018550
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Именно с Calculated Fields я и экспериментировал и получил ошибку, вышеуказанную.

Какова дальнейшая судьба значений, веденных пользователем?

P.S. В FibDataset-е можно определить UpdateSQL, в котором писать в базу только, что нужно. И куда нужно. Только поля должны содержаться в запросе.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018667
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Генерируется некая http-ссылка и пользователь по ней переходит, если нажмет вторую кнопку.
Скажем так. Пользователь выбирает имя бота и переходит к нему по нажатию на кнопку, чтобы было чуть понятней.
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018724
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Генерируется некая http-ссылка и пользователь по ней переходит, если нажмет вторую кнопку.
Скажем так. Пользователь выбирает имя бота и переходит к нему по нажатию на кнопку, чтобы было чуть понятней.
Так а почему нельзя генерировать эту ссылку в OnCalcFields?
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018727
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не проблема, но где, как отображать выбор, имя бота, ссылку и т.д.?

пользователь должен видеть сделанный выбор и возможность нажать кнопку и очень желательно в одной и той же строки сетки
...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018744
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Генерируется некая http-ссылка и пользователь по ней переходит, если нажмет вторую кнопку.
Скажем так. Пользователь выбирает имя бота и переходит к нему по нажатию на кнопку, чтобы было чуть понятней.


В SQL-запрос добавляем фиктивное поле, например:

Код: sql
1.
       cast( null as varchar( 32 ) ) as BOT_NAME



На добавленное поле назначаем строку в DbVerticalGrid c EditProperties ComboBox, список которого заполняем, например, в OnCreate формы.
Всем строкам, которые нельзя менять, присваиваем Properties.EditProperties.ReadOnly := True;


В UpdateSQL DataSet-а пишем холостой запрос, что бы можно было вводить значения:
Код: sql
1.
2.
select 1
  from RDB$DATABASE



Ниже исходные тексты (D-XE7, ежли чо):
создание таблицы

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table B (
    ID   integer not null,
    VAL  varchar( 10 )
);

alter table B
  add constraint PK_B primary key ( ID );

insert into B ( ID, VAL )
       values (  1, 'VALUE #1' );
commit;




текст dpr
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
program Project8;

uses
  Vcl.Forms,
  Unit14 in 'Unit14.pas' {Form14};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm14, Form14);
  Application.Run;
end.



текст pas


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
unit Unit14;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxStyles, cxEdit, dxSkinsCore,
  dxSkinOffice2010Blue, Data.DB, FIBDataSet, pFIBDataSet, FIBDatabase, pFIBDatabase, cxVGrid, cxDBVGrid, cxInplaceContainer, Vcl.StdCtrls, cxLabel,
  cxDropDownEdit, cxTextEdit;

type
  TForm14 = class(TForm)
    cxDBVerticalGrid1: TcxDBVerticalGrid;
    cxDBVerticalGrid1DBEditorRow1: TcxDBEditorRow;
    cxDBVerticalGrid1DBEditorRow2: TcxDBEditorRow;
    rowBotName: TcxDBEditorRow;
    db: TpFIBDatabase;
    tr: TpFIBTransaction;
    ds: TpFIBDataSet;
    sr: TDataSource;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form14: TForm14;

implementation

{$R *.dfm}

procedure TForm14.Button1Click(Sender: TObject);
begin
  Caption := ds.fieldByName( 'BOT_NAME' ).AsString;
end;

procedure TForm14.FormCreate(Sender: TObject);
begin
  with TcxComboBoxProperties( rowBotName.Properties.EditProperties ).Items do
  begin
    Add( 'BOT NAME #1' );
    Add( 'BOT NAME #2' );
    Add( 'BOT NAME #3' );
  end;
end;

end.




текст dfm


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
object Form14: TForm14
  Left = 0
  Top = 0
  Caption = 'Form14'
  ClientHeight = 299
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object cxDBVerticalGrid1: TcxDBVerticalGrid
    Left = 32
    Top = 24
    Width = 417
    Height = 121
    OptionsView.RowHeaderWidth = 154
    Navigator.Buttons.CustomButtons = <>
    TabOrder = 0
    DataController.DataSource = sr
    Version = 1
    object cxDBVerticalGrid1DBEditorRow1: TcxDBEditorRow
      Properties.EditPropertiesClassName = 'TcxTextEditProperties'
      Properties.EditProperties.ReadOnly = True
      Properties.DataBinding.FieldName = 'ID'
      Properties.Options.Editing = False
      ID = 0
      ParentID = -1
      Index = 0
      Version = 1
    end
    object cxDBVerticalGrid1DBEditorRow2: TcxDBEditorRow
      Properties.EditPropertiesClassName = 'TcxTextEditProperties'
      Properties.EditProperties.ReadOnly = True
      Properties.DataBinding.FieldName = 'VAL'
      ID = 1
      ParentID = -1
      Index = 1
      Version = 1
    end
    object rowBotName: TcxDBEditorRow
      Properties.EditPropertiesClassName = 'TcxComboBoxProperties'
      Properties.DataBinding.FieldName = 'BOT_NAME'
      ID = 2
      ParentID = -1
      Index = 2
      Version = 1
    end
  end
  object Button1: TButton
    Left = 480
    Top = 24
    Width = 137
    Height = 25
    Caption = 'Get Bot Name'
    TabOrder = 1
    OnClick = Button1Click
  end
  object db: TpFIBDatabase
    Connected = True
    DBName = 'test'
    DBParams.Strings = (
      'user_name=SYSDBA'
      'password=masterkey'
      'lc_ctype=WIN1251')
    DefaultTransaction = tr
    DefaultUpdateTransaction = tr
    SQLDialect = 3
    Timeout = 0
    LibraryName = 'fbclient.dll'
    WaitForRestoreConnect = 0
    Left = 32
    Top = 168
  end
  object tr: TpFIBTransaction
    Active = True
    DefaultDatabase = db
    Left = 32
    Top = 224
  end
  object ds: TpFIBDataSet
    UpdateSQL.Strings = (
      'select 1'
      '  from RDB$DATABASE')
    SelectSQL.Strings = (
      'select ID,'
      '       VAL,'
      '       cast( null as varchar( 32 ) ) as BOT_NAME'
      '  from B')
    Active = True
    Transaction = tr
    Database = db
    Left = 80
    Top = 168
  end
  object sr: TDataSource
    DataSet = ds
    Left = 128
    Top = 168
  end
end


...
Рейтинг: 0 / 0
Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
    #40018751
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov
В UpdateSQL DataSet-а пишем холостой запрос


спасибо, та сработало
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Присвоить значение строке TcxDBVerticalGrid (ReadOnly DataSet)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]