Como exibir e editar campos MEMO no TDBGrid do Delphi

click fraud protection

Se você estiver desenvolvendo aplicativos de banco de dados com tabelas contendo campos MEMO, notará que, por padrão, o componente TDBGrid não mostra o conteúdo de um campo MEMO dentro de uma célula DBGrid.

Este artigo fornece uma idéia de como resolver o problema deste TMemoField (com mais alguns truques) ...

TMemoField

Os campos de memorando são usados ​​para representar textos longos ou combinações de texto e números. Ao criar aplicativos de banco de dados usando Delphi, o objeto TMemoField é usado para representar um campo de memorando em um conjunto de dados. O TMemoField encapsula o comportamento fundamental comum aos campos que contêm dados de texto ou comprimento arbitrário. Na maioria dos bancos de dados, o tamanho do campo Memorando é limitado pelo tamanho do banco de dados.

Embora você possa exibir o conteúdo de um campo MEMO em um componente TDBMemo, por design, o TDBGrid exibirá apenas "(Memo)" para o conteúdo desses campos.

Para realmente exibir algum texto (do campo MEMO) na célula DBGrid apropriada, você precisará adicionar apenas uma linha simples de código ...

instagram viewer

Para os fins da próxima discussão, digamos que você tenha uma tabela de banco de dados chamada "TestTable" com pelo menos um campo MEMO chamado "Data".

OnGetText

Para mostrar o conteúdo de um campo MEMO no DBGrid, você precisa anexar uma simples linha de código no campo OnGetText evento. A maneira mais fácil de criar o manipulador de eventos OnGetText é usar o editor de Campos em tempo de design para criar um componente de campo persistente para o campo Memorando:

  1. Conecte seu componente descendente do TDataset (TTable, TQuery, TADOTable, TADOQuery ...) à tabela do banco de dados "TestTable".
  2. Clique duas vezes no componente do conjunto de dados para abrir o editor de Campos
  3. Adicione o campo MEMO à lista de campos persistentes
  4. Selecione o campo MEMO no editor de campos
  5. Ative a guia Eventos no Inspetor de objetos
  6. Clique duas vezes no evento OnGetText para criar o manipulador de eventos

Adicione a próxima linha de código (em itálico abaixo):

procedimento TForm1.DBTableDataGetText (
Remetente: TField;
var Texto: String;
DisplayText: Boolean);
início
Texto: = Copiar (DBTableData. AsString, 1, 50);

Nota: o objeto do conjunto de dados é chamado "DBTable", o campo MEMO é chamado "DATA" e, portanto, por padrão, o TMemoField conectado ao campo do banco de dados MEMO é chamado "DBTableData". Atribuindo DBTableData. Como corda ao Texto parâmetro do evento OnGetText, dizemos ao Delphi para exibir TODO o texto do campo MEMO em uma célula DBGrid.
Você também pode adaptar o DisplayWidth do campo Memorando para um valor mais apropriado.

Nota: como os campos MEMO podem ser GRANDES, é uma boa ideia mostrar apenas uma parte dele. No código acima, apenas os 50 primeiros caracteres são exibidos.

Editando em um formulário separado

Por padrão, o TDBGrid não permite a edição de campos MEMO. Se você deseja ativar a edição "no local", poderá adicionar algum código para reagir a uma ação do usuário que mostre uma janela separada que permita a edição usando um componente do TMemo.
Por uma questão de simplicidade, abriremos uma janela de edição quando ENTER for pressionado "em" um campo MEMO em um DBGrid.
Vamos usar o KeyDown evento de um componente DBGrid:

procedimento TForm1.DBGrid1KeyDown (
Remetente: TObject;
var Chave: Word;
Shift: TShiftState);
início
se Key = VK_RETURN, então
início
se DBGrid1.SelectedField = DBTableData, então
com TMemoEditorForm. Criar (nil) fazer
experimentar
DBMemoEditor. Texto: = DBTableData. Como corda;
ShowModal;
DBTable. Editar;
DBTableData. AsString: = DBMemoEditor. Texto;
finalmente
Livre;
fim;
fim;
fim;

Nota 1: o "TMemoEditorForm" é um formulário secundário que contém apenas um componente: "DBMemoEditor" (TMemo).
Nota 2: o "TMemoEditorForm" foi removido da lista "Criar formulários automaticamente" na janela de diálogo Opções do projeto.

Vamos ver o que acontece no manipulador de eventos KeyDown do DBGrid1:

  1. Quando um usuário pressiona a tecla ENTER (estamos comparando o parâmetro Key com o VK_RETURN código chave virtual) [Chave = VK_RETURN],
  2. Se o campo atualmente selecionado no DBGrid for o nosso campo MEMO (DBGrid1.SelectedField = DBTableData),
  3. Criamos o TMemoEditorForm [TMemoEditorForm. Criar (nulo)],
  4. Envie o valor do campo MEMO para o componente TMemo [DBMemoEditor. Texto: = DBTableData. Como corda],
  5. Exiba o formulário modalmente [ShowModal],
  6. Quando um usuário termina a edição e fecha o formulário, precisamos colocar o dataste no modo Edit [DBTable. Editar],
  7. Para poder atribuir o valor editado de volta ao nosso campo MEMO [DBTableData. AsString: = DBMemoEditor. Texto].

Nota: se você estiver procurando mais artigos relacionados ao TDBGrid e dicas de uso, visite: "TDBGrid para o MAX"coleção de dicas.

instagram story viewer