Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 DevExpress cxGrid GridMode=True  [new]
vladgul
Member

Откуда:
Сообщений: 9
Доброго времени суток!

Подскажите, пожалуйста, есть ли возможность определить выделенные в гриде записи в режиме GridMode=True, когда выделил записи и пролистал несколько экранов вверх/вниз и выделил еще.

   
 for I := 0 to cxGridPeopleForPeopleFormDBTableView.Controller.SelectedRowCount - 1 do
    begin
     if cxGridPeopleForPeopleFormDBTableView.Controller.SelectedRows[i] <> nil then 
      if cxGridPeopleForPeopleFormDBTableView.Controller.SelectedRows[i].IsData then
     ......
    end;

Вот это условие для пролистанных записей не выполняется, т.е. = nil
if cxGridPeopleForPeopleFormDBTableView.Controller.SelectedRows[i] <> nil then

Есть ли какая либо возможность узнать какая запись была выделена и поработать с ней в том или инов виде?
22 май 20, 00:16    [22137405]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress cxGrid GridMode=True  [new]
zinpub
Member

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

Посмотри GetSelectedBookmark
22 май 20, 10:16    [22137507]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress cxGrid GridMode=True  [new]
DimaBr
Member

Откуда:
Сообщений: 11653
TcxGridDBTableView().DataController.GetSelectedCount
22 май 20, 11:27    [22137573]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress cxGrid GridMode=True  [new]
vladgul
Member

Откуда:
Сообщений: 9
zinpub
vladgul,

Посмотри GetSelectedBookmark

Огромное спасибо за наводку. То что нужно.

Но теперь выплыл еще один вопрос по такому же гриду
Есть ли простой способ сделать следующее:
Выделены несколько записей, которые пользователь хочет удалить
Предварительно пробегаюсь по выделенным записям и проверяю определенное условие при котором нельзя удалять текущую запись.
Раньше (при GridMode=False) было просто
Делал снятие выделения с записи, которую нельзя удалять
и затем делал
cxGridPeopleForPeopleFormDBTableView.Controller.DeleteSelection;

Сейчас (при GridMode=True) DeleteSelection отрабатывает нормально, но как сбросить выделение текущей записи?

Вот сейчас примерно такой код, после которого будет DeleteSelection
   for I := 0 to cxGridPeopleForPeopleFormDBTableView.DataController.GetSelectedCount - 1 do
    begin
       CurRow := cxGridPeopleForPeopleFormDBTableView.DataController.GetSelectedBookmark(I);
       if DataModuleConfig.Dataset_PeopleForPeopleForm.BookmarkValid(CurRow) then
        begin
         DataModuleConfig.Dataset_PeopleForPeopleForm.Bookmark := CurRow;
         If DataModuleConfig.Dataset_PeopleForPeopleForm.FieldByName('OPERATORSYSTEM').AsInteger=1 then
          begin
           cxGridPeopleForPeopleFormDBTableView.Controller.SelectedRows[i].Selected := False; // Сбрасываем выделение.  [b][color=blue]Естественно эта строка не работает по причинам описанным в первом посте[/color][/b]
          end;
        end;
    end;


Вижу альтернативный способ, например с сохранением в массив ID выделенных записей, которые проходят проверку и потом удалить их запросом, но так не очень хочется, т.к. на OnBeforeDelete привязана обработка которая выполняет еще для каждой записи дополнительные действия.
23 май 20, 19:56    [22138299]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress cxGrid GridMode=True  [new]
ъъъъъ
Member

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



ты посмотри, как реализована
procedure TcxCustomDataProvider.DeleteSelection;

- и вместо её вызова сделай то же самое, но своё: собери список (AList) удаляемых строк, к списку вызови
DataController.DeleteRecords(AList);


Правда, процедурка
TcxCustomDataController.DeleteRecords(AList: TList);
- она протектед, так что придется к ней обращаться ч/з "крак-класс".
23 май 20, 21:41    [22138340]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить