powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CxGrid + dxMemData - удаление по условию
25 сообщений из 29, страница 1 из 2
CxGrid + dxMemData - удаление по условию
    #40002360
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В MemData, есть колонка CheckUser. Пользователь ставит галочки в строках которые надо удалить.

Если галочек стоит несколько, то удаляет, только первую строку с галочкой, а у остальных строк снимает галочку и они остаются.
Что я делаю не так? Должен удалить все строки с галочками.



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 var 
MD : TdxMemData

MD.DisableControls;
    with MD do
    try
      First;

      while not Eof do
      begin
        if Boolean(FieldValues['CheckUser']) then begin
          Delete;
          Continue;
        end;

        Next;
      end;
    finally
      EnableControls;
    end;
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002379
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели цикл завершается ? Поставь галочку на последнюю строку
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002380
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonnik,

зачем "Continue"?
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002460
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik,

А что отладка говорит? сколько раз срабатывает условие "Boolean(FieldValues['CheckUser'])"?
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002462
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr
Неужели цикл завершается ? Поставь галочку на последнюю строку


Оказывается работает.
Я просто это пробовал с двумя строками. И если ты ставишь галочку во второй строке и сразу нажимаешь на кнопку удалить, то эта галочка еще не записана, потому как ты еще не ушел с этой ячейки.

Можно как-то принудительно переместить фокус на соседнию ячейку или послать какую-то команду, что бы в таких случаях завершился процесс редактирования и данные записались ?


P.S. если бы не было Continue, то шел бы пропуск одной строки, если бы выделение было одним за одним.
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002464
Hammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем так все усложнять?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  md.DisableContols;
  try
    if (mf.Indexes.GetIndexByField(md.FieldByName('CheckUser')) = nil) then
      with mf.Indexes.Add do
        FieldName := 'CheckUser';
    while md.Locate('CheckUser', True, []) do
      md.Delete;
  finally
    md.EnableControls;
  end;
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002470
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik
Можно как-то принудительно переместить фокус на соседнию ячейку или послать какую-то команду, что бы в таких случаях завершился процесс редактирования и данные записались ?
см. ImmediatePost у редакторов
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002478
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik
DimaBr
Неужели цикл завершается ? Поставь галочку на последнюю строку


Оказывается работает.
Я просто это пробовал с двумя строками. И если ты ставишь галочку во второй строке и сразу нажимаешь на кнопку удалить, то эта галочка еще не записана, потому как ты еще не ушел с этой ячейки.

Так что мешает поставить галочку на последней строчке, перейти на первую и запустить свой цикл по удалению, только желательно в режиме отладки
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002512
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavan
Jonnik
Можно как-то принудительно переместить фокус на соседнию ячейку или послать какую-то команду, что бы в таких случаях завершился процесс редактирования и данные записались ?
см. ImmediatePost у редакторов



Это не помогает
Считает, что вторая строка без галочки
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002517
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonnik,

ссыль
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002529
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik
Это не помогает
Где-то что-то недокручено
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002601
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zinpub
Jonnik,

ссыль



Остановился на этом варианте.
Перед тем как работать с данными надо сделать так

Код: pascal
1.
2.
if GridDBView.DataController.DataSource.DataSet.State in [dsEdit, dsInsert] then
    GridDBView.Controller.EditingController.Edit.PostEditValue;




ImmediatePost в сочетание с GridMode и еще принудительной записи в другую колонку при событии EditValueChanged
дает тот же результат, но это костыль какой то будет.
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002607
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik
Что я делаю не так?

Во-первых - придумал левое поле CheckUser вместо того, чтобы воспользоваться мультиселектом грида. Во-вторых, написал кучу лишнего вместо

Код: pascal
1.
2.
3.
4.
while not Eof do
  if FieldValues['CheckUser']
    then Delete
    else Next;


В-третьих, не восстанавливаешь позиционирование на текущей записи после того, как пробежался по выборке.

Остальное нормально.
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002612
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Jonnik
Что я делаю не так?

Во-первых - придумал левое поле CheckUser вместо того, чтобы воспользоваться мультиселектом грида. Во-вторых, написал кучу лишнего вместо

Код: pascal
1.
2.
3.
4.
while not Eof do
  if FieldValues['CheckUser']
    then Delete
    else Next;


В-третьих, не восстанавливаешь позиционирование на текущей записи после того, как пробежался по выборке.

Остальное нормально.



Во первых критиковать чужой код, когда не знаешь всей задумки нет смысла.
Во вторых я знаю про мультиселект, но заказчик хочет галочки. К тому же он не решет всех нужных задач.
В третьих этот код не рабочий. В нем есть ошибка. Про нее я даже написал. Кто-то тоже про это спросил.
Код: pascal
1.
2.
3.
4.
while not Eof do
  if FieldValues['CheckUser']
    then Delete
    else Next;


В четвертых я знаю, что надо сохранить позицию и это следующий шаг.
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002615
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik
ImmediatePost в сочетание с GridMode
у меня в стандартном режиме работает, EditValueChanged никогда не трогал, завязка на визуальные компоненты минимальная, где без нее невозможно, а так по максимуму на событиях датасетов/датасорсов
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002616
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik
я знаю про мультиселект, но заказчик хочет галочки
это очень удобно
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002620
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik
Во первых критиковать чужой код, когда не знаешь всей задумки нет смысла.

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

Jonnik
Во вторых я знаю про мультиселект, но заказчик хочет галочки.

Не умеешь делать мультиселект с галочками?

Jonnik
В третьих этот код не рабочий.

Ну-ну.

Jonnik
В четвертых я знаю, что надо сохранить позицию и это следующий шаг.

Осталось понять, зачем ты вообще создавал топик.
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002629
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonnik
P.S. если бы не было Continue, то шел бы пропуск одной строки, если бы выделение было одним за одним.

Ну, либо Delete, либо Next. Реализуется с помощью "else".
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002637
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
Jonnik
P.S. если бы не было Continue, то шел бы пропуск одной строки, если бы выделение было одним за одним.

Ну, либо Delete, либо Next. Реализуется с помощью "else".



А ну да. Тут я согласен. Не так понял.
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002718
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже несколько лет как мультиселект с чекушками в гриде искаропки
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40002756
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
white_nigger,

может, у него старая версия.
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40003217
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой бы нарядный ни был мультиселект в контроле это перпендикулярно возможности/необходимости иметь помеченные в датасете записи
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40003233
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan
какой бы нарядный ни был мультиселект в контроле это перпендикулярно возможности/необходимости иметь помеченные в датасете записи

И какова же необходимость иметь помеченные в датасете записи?
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40003241
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
какова же необходимость иметь помеченные в датасете записи?
например обработка отмеченных
...
Рейтинг: 0 / 0
CxGrid + dxMemData - удаление по условию
    #40003244
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan
softwarer
какова же необходимость иметь помеченные в датасете записи?
например обработка отмеченных

(зевая) Так какова же необходимость иметь помеченные в датасете записи? Подробнее, пожалуйста.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CxGrid + dxMemData - удаление по условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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