私は、列のreadonlyプロパティを使用するとフィールド値を編集できないことを知っています。しかし、これはインプレースエディタが自分自身を示すのを止めるわけではありません。 私はカラムを保護するだけでなく "触ることができない"ようにする方法が必要です。 方法はありますか?Delphi:TDBgridの列を編集しないでください
2
A
答えて
2
私はあなたが正しく何をしたい理解していれば、これはグリッドのInplaceEditor
を作成することができるかどうかを決定するとして、あなたは、カスタムのTDBGridの子孫を作成し、 そのCanEditShow
メソッドをオーバーライドすることで、非常に単純にこれを行うことができます。
type
TMyDBGrid = class(TDBGrid)
private
FROColumn: Integer;
protected
function CanEditShow : Boolean; override;
public
property ROColumn : Integer read FROColumn write FROColumn;
end;
function TMyDBGrid.CanEditShow: Boolean;
begin
Result := Inherited CanEditShow;
Result := Result and (Col <> ROColumn);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyDBGrid := TMyDBGrid.Create(Self);
MyDBGrid.ROColumn := 1;
MyDBGrid.DataSource := DataSource1;
MyDBGrid.Parent := Self;
[...]
をこの最小限の例では、数字で1つのグリッド列を1つだけ と定義しています(InplaceEditor
は許可されていません)。明らかに任意のメカニズムを使用することができます CanEditShow
がFalseを返す列を識別したいと思います。
上記のコードでは、Indicator
列をオフにした場合(つまり、Options.dgIndicator
をFalseに設定した場合)、グリッドの列番号が変更されることを考慮していないことに注意してください。
もちろん、あなたが列を使用すると、コード内でグリッドを作成気に入らない場合、あなたがそれを置くことができ
type
TAllowGridEditEvent = procedure(Sender : TObject; var AllowEdit : Boolean) of object;
TMyDBGrid = class(TDBGrid)
private
FOnAllowEdit: TAllowGridEditEvent;
protected
function CanEditShow : Boolean; override;
procedure DoAllowEdit(var AllowEdit : Boolean);
public
property OnAllowEdit : TAllowGridEditEvent read FOnAllowEdit write FOnAllowEdit;
end;
function TMyDBGrid.CanEditShow: Boolean;
begin
Result := Inherited CanEditShow;
if Result then
DoAllowEdit(Result);
end;
procedure TMyDBGrid.DoAllowEdit(var AllowEdit: Boolean);
begin
if Assigned(FOnAllowEdit) then
FOnAllowEdit(Self, AllowEdit);
end;
procedure TForm1.AllowEdit(Sender: TObject; var AllowEdit: Boolean);
var
Grid : TMyDBGrid;
begin
Grid := Sender as TMyDBGrid;
AllowEdit := Grid.Col <> 1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyDBGrid := TMyDBGrid.Create(Self);
MyDBGrid.ROColumn := 1;
MyDBGrid.DataSource := DataSource1;
MyDBGrid.Parent := Self;
MyDBGrid.OnAllowEdit := AllowEdit;
[...]
のように割り当て可能なイベントを使用してInplaceEditorを許可されているカスタマイズのためのより多くの柔軟性を得ますカスタムパッケージをインストールして をIDE またはにインストールする場合、Delphiのバージョンが最新の場合は CanEditShow
をclass helper
に実装してください。
関連する問題
- 1. gridviewのドロップダウンリストテンプレートを編集しないでください。列の値を更新しないでください
- 2. Grocerycrudの編集操作を追加してください
- 3. 編集ページのリストボックスで「古い値」を選択してください
- 4. jqgrid - 条件が満たされない場合、編集フォームを表示しないでください。
- 5. EditTextオブジェクトの編集可能な値を確認してください
- 6. djangoの編集可能な選択肢を追加してください
- 7. 編集表の赤いボタンの色を変更してください
- 8. 編集不可能なときにTextAreaにキャレットを残してください
- 9. グループSQLでグループを集計しないでください
- 10. topomergeのエラーをプログラムまたは手動で編集してください。
- 11. コントローラーのフィルターやモデルのコールバックを使用してレコードを編集しないでください。
- 12. リッチテキストボックスからデータを編集するには、Cで現在のデータを削除しないでください。
- 13. 編集ボタンでhtmlテーブルにmysqlデータを入力してください
- 14. フォルダ内の特定のファイルを見つけて編集してください
- 15. UITabBarの他のセクションから「編集」ボタンを削除してください
- 16. 2回目に編集した後にフォームをリフレッシュしてください。
- 17. フォームの編集時にデータベースからドロップダウンリストを入力してください。
- 18. CLION IDEの挿入/編集モードを入力してください
- 19. 剣道グリッド:トリガアップデートポップアップ編集のためにEnterキーを押してください
- 20. 複数の人が同じフォームを編集できないようにしてください
- 21. 編集するユーザーのコンテンツでcinを埋めてください
- 22. テーブルビューを編集する前に、willBeginEditingRowAtIndexPathとdidEndEditingRowAtIndexPathを検出しないでください
- 23. 編集ボタンで行編集イベントが発生しないをクリック
- 24. 行をループし、編集する列の動的範囲を選択してください
- 25. mysqliのPHPが存在する場合は編集してください
- 26. 投稿の作成者だけがクラスベースのビューで編集できるようにしてください - Django?
- 27. Railsのinpusを編集/更新する方法を教えてください。
- 28. JSONの直列化をデシリアライズしないでください。
- 29. 他のものを編集可能にしながら列を編集できないようにする
- 30. MindMupの編集可能なテーブルで編集できない列を作成します
[this](http://stackoverflow.com/a/16043353/512728)は細胞のためのものですが、始めるのに役立つかもしれません –