Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CxGrid + dxMemData - удаление по условию / 25 сообщений из 29, страница 1 из 2
24.09.2020, 22:57
    #40002360
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
В 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
25.09.2020, 00:51
    #40002379
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Неужели цикл завершается ? Поставь галочку на последнюю строку
...
Рейтинг: 0 / 0
25.09.2020, 00:57
    #40002380
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Jonnik,

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

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


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

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


P.S. если бы не было Continue, то шел бы пропуск одной строки, если бы выделение было одним за одним.
...
Рейтинг: 0 / 0
25.09.2020, 11:42
    #40002464
Hammer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
А зачем так все усложнять?
Код: 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
25.09.2020, 11:52
    #40002470
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Jonnik
Можно как-то принудительно переместить фокус на соседнию ячейку или послать какую-то команду, что бы в таких случаях завершился процесс редактирования и данные записались ?
см. ImmediatePost у редакторов
...
Рейтинг: 0 / 0
25.09.2020, 12:11
    #40002478
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Jonnik
DimaBr
Неужели цикл завершается ? Поставь галочку на последнюю строку


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

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



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

ссыль
...
Рейтинг: 0 / 0
25.09.2020, 13:44
    #40002529
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Jonnik
Это не помогает
Где-то что-то недокручено
...
Рейтинг: 0 / 0
25.09.2020, 16:29
    #40002601
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
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
25.09.2020, 16:51
    #40002607
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Jonnik
Что я делаю не так?

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

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


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

Остальное нормально.
...
Рейтинг: 0 / 0
25.09.2020, 17:13
    #40002612
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
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
25.09.2020, 17:25
    #40002615
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Jonnik
ImmediatePost в сочетание с GridMode
у меня в стандартном режиме работает, EditValueChanged никогда не трогал, завязка на визуальные компоненты минимальная, где без нее невозможно, а так по максимуму на событиях датасетов/датасорсов
...
Рейтинг: 0 / 0
25.09.2020, 17:26
    #40002616
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Jonnik
я знаю про мультиселект, но заказчик хочет галочки
это очень удобно
...
Рейтинг: 0 / 0
25.09.2020, 17:33
    #40002620
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CxGrid + dxMemData - удаление по условию
Jonnik
Во первых критиковать чужой код, когда не знаешь всей задумки нет смысла.

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

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

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

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

Ну-ну.

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

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

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

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



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

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

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

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


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