Ver Mensaje Individual
  #3  
Antiguo 24-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Willo Ver Mensaje
Tengo un dbgrid en D7 y defini un picklist para una columna, hay alguna forma de poner en el campo, solo una parte del valor que se selecciona?
Hola Willo.

La clase TStrings, clase a la que pertenece la propiedad PickList, no posee evento alguno para poder detectar el cambio, por lo tanto hay que buscar por otro lado quién nos avise. Un candidato con buena chance es el evento OnSetText del TField correspondiente a la columna que tiene asignado el PickList.

Para el ejemplo, supongamos que las cadenas almacenadas en el TString son: 'Item 01', 'Item 02',..., 'Item 09' y queremos que al seleccionar un item del PickList nos deje en el campo sólo los dos últimos caracteres: '01', '02', ...'09'.
Lo que tendríamos que hacer en este caso, es despreciar los primeros 5 caracteres: 'Item ', entonces vamos al ejemplo:

Código Delphi [-]
type
   TForm1 = class(TForm)
   ...
   private
     procedure DataSetCampoSetText(Sender: TField; const Text: String);
   public
   end;
...

implementation

procedure TForm1.DataSetCampoSetText(Sender: TField; const Text: String);
begin
  Sender.AsString := Copy(Text, 6, 2); // en caracter 6 está '0' guardo 2 a partir de él
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
begin
  for i := 1 to 9 do
    DBGrid1.Columns[0].PickList.Add('Item 0' + IntToStr(i));
  DataSet.FieldByName('Nombre_de_tu_Campo').OnSetText:= DataSetCampoSetText;
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita