私は、ユーザーがクリックしてプロセスのために複数選択するためのエントリのグリッドを持っています。エントリの一部は、最初に選択された行の値に基づいて無効になります。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;
私はApplication.OnMessage
中とのDBGridとフォームのOnMouseDown
イベントを試してみましたが、彼らは動作しませんし、何TBookmarkList.BeforeInsertItem
イベントはありません。私は何ができますか、または私は変更する必要がありますか?
あなたの質問のタイトルは、Qのテキストで記述するものと一致していないようです。ユーザーがグリッド内のいくつかの行を選択しないようにしようとしていますか?そうであれば、最初の場所に表示されないようにしてください。グリッドのデータセットでフィルタを使用することによって? –
最初の部分:はい。ユーザーがデータを見てから、何を選択するか決める前に...あなたが想像することができるすべてのフィルタを行ったが、ユーザーの要求を変更できない –
ユーザーが最初の選択をしたらあなたが*無効にしたい*行)、フィルタリングして、適格でない行を削除することができます。これはUIの観点からはるかにクリーンです。ユーザーが特定の行を選択しないようにする方法をハッキングするかもしれませんが、その時点で、それらを無効にして(選択できない)ことを示すために別の行を描画することはできません。 –