TCXGrid не может редактировать значение ячейки

У меня есть приложение с CXGrid в форме с парой ячеек. Мне нужно иметь возможность редактировать значение в ячейке, и мне нужно обновить значение прямо в ячейке. Прочитав, я вижу, что для обеспечения возможности редактирования необходимо установить два основных свойства:

    GridMainDBTableView1.OptionsData.Editing := True;
    GridMainDBTableView1TotalCount.Editing   := True;

Столбец, значение которого необходимо изменить, — это столбец TotalCount. Когда я запускаю приложение и пытаюсь отредактировать значение, я вижу, что ячейка доступна для редактирования, поскольку мой курсор появляется внутри ячейки, я могу выделить текущее целочисленное значение, которое находится там внутри, но я никогда не могу его редактировать. Он никогда не принимает вводимые мной символы и даже не может удалить текущее значение для ввода нового значения. Больше ничего не происходит, кроме появления курсора внутри ячейки, что также указывает на то, что режим «только для чтения» является ложным. но ничего не происходит, мне никогда не удается изменить значение. Есть ли что-нибудь еще, что я мог пропустить. Я прочитал несколько сообщений здесь и на DevExpress, но не смог найти работающего решения. Большинство, если не все, решений указывают на то, что нам нужно изменить значения, приведенные выше.

Я пытался даже выставить код на показ, чтобы убедиться, что для редактирования столбцов действительно установлено значение True и т. д., но все равно ничего не меняется. Единственный раз, когда я вижу изменения в форме, это когда я делаю ее доступной только для чтения, тогда мой курсор больше не появляется в ячейке.

Обновлено: Когда я запрашиваю БД, чтобы получить значения, которые необходимо заполнить сетку, столбец, в котором я хочу изменить значения, запрашивается следующим образом:

 ' ROUND(COALESCE(T0.TotalCount,0),T1.QtyDecimal) AS TotalCount, ';

Может ли это быть причиной того, что оно несъедобно?

Это <column>.Options.editing, который необходимо установить. И свойство .readonly FieldDef или TField не должно быть readonly. Также для <column>.Focusing должно быть установлено значение True.

Freddie Bell 20.08.2024 10:33

@FreddieBell обе эти опции установлены, как вы указали в своем ответе. и ничего не меняется динамически при отображении формы с сеткой.

Japster 20.08.2024 10:45

Курсор, появляющийся в ячейке, не означает, что она не предназначена только для чтения, просто ее содержимое можно выбрать, что необходимо, чтобы пользователь мог, например, скопировать часть значения ячейки. Существует множество причин, по которым поле может быть недоступно для редактирования: это может быть вычисляемое поле (уровень Tdataset), сводное поле (cxgrid) или поле, недоступное для редактирования из базы данных (независимо от того, какой запрос и база данных послужили источником данных). Необходимо предоставить более подробную информацию, чтобы не перечислять все случаи, когда поле может быть недоступно для редактирования.

Brian 20.08.2024 12:42

Недавно у меня возникла именно эта проблема. Я обнаружил, что для свойства readonly компонента таблицы базы данных установлено значение true по какой-то странной причине, вероятно, из-за ошибочного нажатия клавиши с моей стороны при настройке свойств компонента TTable.

John Taylor 20.08.2024 19:33

@Brian Вы действительно правы, я установил для свойств, которые должны быть истинными, как указано выше, значение True, но редактирование по-прежнему не происходит. Источник данных не предназначен только для чтения, поэтому я понятия не имею, где еще искать настройку.

Japster 21.08.2024 08:41

Ни одна известная мне база данных не вернет такой столбец результатов, используя формулу, доступную для редактирования. Я бы предложил, чтобы сетка выполняла форматирование с помощью запроса, просто возвращающего необходимые поля. Либо в качестве спецификатора формата для столбца сетки, либо в его OnGetDisplayText.

Brian 21.08.2024 14:24

@ Брайан, я также выпустил то, что вы не можете редактировать вычисляемое поле, тогда возникает вопрос, как мне сохранить обновленное значение с правильными десятичными знаками. Теперь мое значение в TotalCount теперь можно изменить, но оно не сохраняет правильное значение внутри базы данных с требованием десятичного числа. Он сохраняет введенное мной значение, отредактированное значение, и сохраняет его. Я попытался поместить код в процедуру GridMainDBTableView1CellValueChanged, но он использует не измененное значение, а исходное значение, хранящееся в файле. клетка.

Japster 21.08.2024 15:19

Одним из мест может быть уровень TDataSet (вероятно, компонента запроса в данном случае) с использованием обработчиков событий OnChange или BeforePost.

Brian 21.08.2024 16:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, проблему удалось решить, следуя совету Брайана выше в комментариях. Итак, я решил проблему, выполнив следующие действия.

Я убедился, что в моем выборе используется стандартный столбец, а не вычисляемый. Затем я передал в набор данных часть десятичных вычислений, в данном случае ADOQuery. И добавил свой код в событие beforePost.

procedure TfrmSTK502.qrySTKSTakeSummaryBeforePost(DataSet: TDataSet);
begin
  if qrySTKSTakeSummary.State in [dsEdit, dsInsert] then
  begin
    // Get QtyDecimal from your function
    var QtyDecimal := getQtyDecimal();

    // Round the value
    var RoundedValue := 
  RoundTo(qrySTKSTakeSummary.FieldByName('TotalCount').AsFloat, - QtyDecimal);

// Set the rounded value
    qrySTKSTakeSummary.FieldByName('TotalCount').AsFloat := RoundedValue;
  end;
end;

Другие вопросы по теме