У меня есть сетка записей, которую пользователь нажмет на мультивыбор для процесса. Некоторые из записей будут недействительными в зависимости от значений первой выбранной строки.DBGrid: как предотвратить выбор строки?
Я знаю о DBGrid.SelectedRows.CurrentRowSelected
, но я не могу найти подходящее место для проверки моих условий, чтобы установить его в True или False.
Что-то вроде этого:
var
bm: TBookmark;
CachedIdentity: String;
CanSelect: Boolean;
begin
with dgbSkypeConversations do
begin
if SelectedRows.Count > 0 then
begin
DataSource.DataSet.DisableControls;
bm := DataSource.DataSet.GetBookmark;
CachedIdentity := DataSource.DataSet.FieldByName('identity').AsString;
DataSource.DataSet.GotoBookmark(SelectedRows[0]);
CanSelect := DataSource.DataSet.FieldByName('identity').AsString <> CachedIdentity;
DataSource.DataSet.GotoBookmark(bm);
DataSource.DataSet.FreeBookmark(bm);
SelectedRows.CurrentRowSelected := CanSelect;
DataSource.DataSet.EnableControls;
end;
end
end;
Я попытался OnMouseDown
события в Application.OnMessage
и в DBGrid и форме, но они не работают, и нет TBookmarkList.BeforeInsertItem
события. Что я могу сделать или изменить?
Ваш Q в, кажется, не соответствует тому, что вы описали в тексте д. Вы пытаетесь запретить пользователю выбирать некоторые строки в сетке? Если это так, почему бы просто не предотвратить их отображение в первую очередь, например. используя фильтр в наборе данных сетки? –
Первая часть: да. Во-вторых, потому что пользователю нужно видеть данные, а затем решать, что выбрать, а не раньше ... Я сделал всю тему фильтра, которую вы можете себе представить, но я не могу изменить требования пользователя. –
Как только пользователь сделал первый выбор (который является точкой, которую вы хотите отключить * строк), вы можете фильтровать, чтобы удалить неприемлемые строки, что намного чище с точки зрения пользовательского интерфейса. Хотя вы можете взломать таким образом, чтобы пользователь не мог выбирать определенные строки, в этот момент вы не можете рисовать их по-разному, указав, что они отключены (не выбираются). –