Ich habe ein Raster von Einträgen, auf die der Benutzer klicken wird, um einen Prozess mehrfach auszuwählen. Einige der Einträge sind basierend auf den Werten der ersten ausgewählten Zeile ungültig.DBGrid: Wie kann verhindert werden, dass eine Zeile ausgewählt wird?
Ich weiß über DBGrid.SelectedRows.CurrentRowSelected
, aber ich kann keinen geeigneten Platz zum Überprüfen meiner Bedingungen finden, um es auf True oder False setzen.
Etwas wie folgt aus:
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;
Ich habe versucht, die OnMouseDown
Ereignisse in Application.OnMessage
und des DBGrid und die Form, aber sie funktionieren nicht, und es gibt keine TBookmarkList.BeforeInsertItem
Ereignis. Was kann ich tun oder muss ich ändern?
TITEL q ist nicht zu passen scheint, was Sie in den Text des q beschreiben. Möchten Sie verhindern, dass der Benutzer einige Zeilen im Raster auswählt? Wenn dies der Fall ist, warum verhindern sie nicht, dass sie an erster Stelle angezeigt werden, z. indem Sie einen Filter im Dataset des Rasters verwenden? –
Erster Teil: ja. Zweitens, weil der Benutzer die Daten sehen und dann entscheiden muss, was zu wählen ist, nicht vorher ... Ich habe die ganze Filtersache gemacht, die Sie sich vorstellen können, aber ich kann die Benutzeranforderung nicht ändern –
Sobald der Benutzer die erste Auswahl getroffen hat (Dies ist der Punkt, den Sie * Zeilen * deaktivieren möchten. Sie können filtern, um die nicht zulässigen Zeilen zu entfernen, was vom Standpunkt der Benutzeroberfläche aus wesentlich sauberer ist. Während Sie so hacken können, dass der Benutzer bestimmte Zeilen nicht auswählen kann, können Sie sie an dieser Stelle nicht anders zeichnen, um anzuzeigen, dass sie deaktiviert sind (nicht auswählbar). –