Ver Mensaje Individual
  #2  
Antiguo 09-02-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Reputación: 22
Héctor Randolph Va por buen camino
Hola Jymy!

Revisé el código que adjuntaste, sin embargo no he puedo ayudare a resolver el error que comentas porque en el form tienes una tabla que hace referencia a un Alias y obviamente no adjuntaste las bases de datos.

Espero que no te moleste si publicó parte de tu código de ejemplo, es tan sólo para hacer algunas recomendaciones.

Código Delphi [-]
var
  Form1: TForm1;
  Text : string;
  lst : TStrings;

implementation

{$R *.dfm}

procedure TForm1.Table1LARGOGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  Text:= Trim (Sender.asString);
  //lst := TStringList.Create;
  //lst.Add(Sender.asString);
  //DBGrid1.Columns[0].PickList := lst;
end;

procedure TForm1.Table1LARGOSetText(Sender: TField; const Text: String);
begin
  Sender.AsString := Text;
end;

procedure TForm1.DBGrid1EditButtonClick(Sender: TObject);
begin
  //DBGrid1.Columns[0].PickList := lst;
  //DBMemo1.Visible := true;
end;

En primer lugar, es correcto utilizar el evento OnGetText para mostrar el contenido del campo y evitar que aparezca el texto [Memo] en el DBGrid, pero no considero necesario utilizar el evento OnSetText.

Otra recomendación es que para editar el campo memo, utilices otra ventana que se mostrará cuando el usuario pulse sobre botón de edición en la celda del DBGrid.

Por ejemplo en el evento OnEditButtonClick puedes hacer algo como esto:

Código Delphi [-]
procedure TForm1.DBGrid1EditButtonClick(Sender: TObject);
begin
  with (Sender as TDBGrid) do
    if Columns [SelectedIndex].FieldName='LARGO' then
      with TForm2.Create(Self) do
      try
        ShowModal;//Muestra el Form2 que contiene el campo memo
      finally
        Free;
      end;
end;

De esta forma si la columna seleccionada está ligada con el campo que se llama 'LARGO', entonces abres otra ventana (Form2) con el campo memo que quieres editar.

*********************************************************
Por otra parte la propiedad PickList sirve para mostrar una lista desplegable dentro de una celda del DBGrid, es como un ListBox en donde puedes agregar elementos para que el usuario los seleccione al momento de editar la celda.

Un ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.Columns[0].ButtonStyle:=cbsAuto;
  DBGrid1.Columns[0].PickList.Add('Elemento 1');
  DBGrid1.Columns[0].PickList.Add('Elemento 2');
  DBGrid1.Columns[0].PickList.Add('Elemento 3');
end;

Esto mostrará una lista desplegable en la primera columna del DBGrid.

Espero que se haya aclarado algo, un saludo.
Responder Con Cita