В методе TCustomDBGridEh есть код
Код:
if (SelectedRows.Count > 0) and
DataLink.Active and
not (DataLink.DataSet.State in dsEditModes)
then
if dghClearSelection in OptionsEh
then SelectedRows.Refresh(True)
else SelectedRows.Refresh(False);
Он приводит к странным эффектам если используется FireDac. Дело в том, что у FireDac если Bookmark не валиден (любой из параметров), то метод CompareBookmarks вернёт 0 (т.е) равны. И если не обновлять список букмарков в гриде удаляя невалидные, скажем в паттерне
Код:
DataSet.DisableControls;
try
DataSet.Delete;
finally
DataSet.EnableControls;
end;
То отрисовка грида будет рисовать все записи выделенными, потому что метод TBMListEh.Find будет всегда "находить" в списке букмарков равный искомому. Т.е. как только в SelectedRows находится инвалидный букмарк, функцит проверяющие выделенность текущей записи сходят с ума.