PDA

Ver la Versión Completa : tomar una parte de un Picklist en un dbgrid


Willo
23-08-2012, 19:26:42
Hola a todos...

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?

Gracias de antemano

Cañones
24-08-2012, 00:47:58
Hola a todos...

hay alguna forma de poner en el campo, solo una parte del valor que se selecciona?

Gracias de antemano

Podés citar un ejemplo, porque no logro entender.

ecfisa
24-08-2012, 05:43:09
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:


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.