答えて
OK 私の問題はthisです。 OKしかし問題は、それがどのようにすべきかを理解していないということです。だから私はコード内の私のロジックを変更します。また、リスト内のdbgridから選択した行を保存することで実装します。
IMHO、これは答えにはなりませんが、主題に関する編集です。たぶんあなたは、あなたが物事をどのようにしているかを啓発するためのいくつかのコードを含めるといいでしょう... –
TClientDataset + TDatasetProvider + TDatasetを使用している場合は、クライアント配列に到達する前にデータ配列バリアントを操作し、更新不可能なブール値フィールドを含めることができます。
完了したら、OnDrawColumnCellイベントを使用してグリッドに描画するだけで済みます。ここでは、CheckBoxを使用せず、ビットマップのみを使用します(ユーザーがクリックすると、選択/選択解除に変わります)。
次のように私がテストしたとして、最も簡単で最も完全な方法がある:あなたのユニットのプライベートセクションで
、グリッドオプションを保持するためのグローバルを宣言します。これは、チェックボックス列を入力中に、一時的な無効化テキスト編集後に復元するために使用されます - これは多分delphi.about.comの記事OnCellClickで
private
GridOriginalOptions : TDBGridOptions;
に関するヨルダンBorisovinで述べた小さなエラーのいずれかであるとして、データベースグリッド
0123のブールフィールドのチェックボックスを描くprocedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if (Column.Field.DataType=ftBoolean) then
begin
Column.Grid.DataSource.DataSet.Edit;
Column.Field.Value:= not Column.Field.AsBoolean;
Column.Grid.DataSource.DataSet.Post;
end;
end;
にイベント、フィールドがブール値である場合、トグル、ポスト変更
新しい部分では、ブール値の列にある間にセルの編集を無効にします。 OnColEnterとOnColExitイベントの場合:さらに
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
if Self.DBGrid1.SelectedField.DataType = ftBoolean then
begin
Self.GridOriginalOptions := Self.DBGrid1.Options;
Self.DBGrid1.Options := Self.DBGrid1.Options - [dgEditing];
end;
end;
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if Self.DBGrid1.SelectedField.DataType = ftBoolean then
Self.DBGrid1.Options := Self.GridOriginalOptions;
end;
、それのチェックボックス
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if ((Self.DBGrid1.SelectedField.DataType = ftBoolean) and (key = VK_SPACE)) then
begin
Self.DBGrid1.DataSource.DataSet.Edit;
Self.DBGrid1.SelectedField.Value:= not Self.DBGrid1.SelectedField.AsBoolean;
Self.DBGrid1.DataSource.DataSet.Post;
end;
end;
を切り替えるためのスペースキーを扱います!
私は答えとしてこれを投稿していただきありがとうございます。私はまだコメントを追加する評判はありません。
Mihai MATEIの回答は、バグのあるユースケースを除いて、まれな(実際に働く)ソリューションに非常に近いです。
グリッド上のユーザーの最初の操作でチェックボックスをクリックすると、最初のクリックは機能しますが、2番目のクリックは基になるDBGridエディタを表示します。
これは、「GridOriginalOptionsmechan」メカニズムを初期化する必要があるためです。 は、そのためには、単にグリッドのフォーカス取得時イベントに次のコードを追加します。それ
procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
DBGrid1ColEnter(Sender);
end;
だそれ!
- 1. ExecuteCompletedはDBGridの
- 2. DBGridのはDBGridのでは読み取り専用
- 3. Dbgrid計算
- 4. Delphi DbGrid by ID
- 5. DBGridをカスタムコンポーネントにバインド
- 6. カスタムdbgridとピックリストの問題
- 7. Delphi Dbgridレコードを削除
- 8. dbgrid autofitをフォームに変換
- 9. Delphi 7.0 DBGrid Ms-Wordハイパーリンク
- 10. DelphiのDBGridの列の高さ
- 11. デルファイのdbgridとsqlの複数のクエリ
- 12. C++ Builder xlsxファイルのExcelへのDBGridエクスポート
- 13. dbGridでのレコードの削除Delphi 2010
- 14. デルファイDBGridでの書式設定
- 15. DBGrid列の値を結合する
- 16. 私自身のDBGridを実装する
- 17. Delphi DBgridの列幅を変更する
- 18. CheckedTextView内のCheckBox
- 19. スペースバーのCheckBoxセレクション
- 20. asp:gridviewのCheckBox ID
- 21. テーブルビューのCheckBox
- 22. とCheckBoxの
- 23. カスタマイズCheckBoxの
- 24. Silverlight CheckBox
- 25. QItemDelegate CheckBox
- 26. Rails、checkbox
- 27. CheckBoxノードレンダラー
- 28. CheckBoxノードツリー
- 29. Jquery CheckBox
- 30. DBGrid、dbf同じ2行をマージする
こんにちは、あなたはあなたに従ってみましたか? ['this'](http://delphi.about.com/od/usedbvcl/l/aa082003a.htm)チュートリアル? – TLama
@TLama、答えとしてあなたのコメントを投稿すれば、私は投票するだろう。 –
@traama、完璧なリンク(それは答えにしないと良い選択です)。 PA、他のコンテンツを持たない外部サイトへのリンク(または外部リンクが動作しない場合は無意味なコンテンツ)は、ここでは受け入れられない答えです。アンサーはスタンドアロンで、他のコンテンツなしで有用なままでなければなりません。 TLamaは完璧な決断を下しました。外部リンクのみの回答は、通常、すぐにフラグが立てられ、削除されます。 –