DbGrid'de yalnızca bir hücrede picklist

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

DbGrid'de yalnızca bir hücrede picklist

Mesaj gönderen PROGRAMADOR »

Merhaba arkadaşlar,

Uzun zamandır cevabını bulmaya çalıştığım bir soru var.

Veri tabanında DBGrid ile verileri alıyorum. DBGrid'de yalnızca bir hücrede picklist kullanmak istiyorum (Benzeri bir dropdown list de olabilir). Ancak bir türlü bunu yapamadım.

Column'un picklist özelliği tüm sütun için picklist ekliyor. Ama ben istediğim hücreler için eklemek istiyorum.

Yardımlarınız için şimdiden teşekkürler.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: DbGrid'de yalnızca bir hücrede picklist

Mesaj gönderen White Rose »

dbgridde istediğiniz colonu seçip picklist özelliğinden ekleyin
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: DbGrid'de yalnızca bir hücrede picklist

Mesaj gönderen NewMember »

Şu kod tabledeki alanın bağlı olduğu kolonu verir.

Kod: Tümünü seç

function FindColumn(const DBGrid: TDBGrid; const FName: string): TColumn;
var i: Integer;
begin
  Result := nil; i := 0;
  while not Assigned(Result) and (i < DBGrid.Columns.Count) do begin
    if AnsiCompareText(DBGrid.Columns[i].FieldName, FName) = 0 then
      Result := DBGrid.Columns[i];
    Inc(i);
  end;
end;
Ekleyeceğin ikinci kontrol ise şu olmalı

DBGridin satırlarında cursorun gezinmesinin tetikleyeceği bir yere de

Kod: Tümünü seç

if Dbgridindataseti.Fieldbyname('SARTKOYMAKISTEDIGINALAN').asString='PICKLIST ÇIKMASINI ISTEDIGIN SART' then
begin
FindColumn(DBGrid1,'ALANADI').PickList.Add('EKLENECEK ELEMAN1');
FindColumn(DBGrid1,'ALANADI').PickList.Add('EKLENECEK ELEMAN2');
FindColumn(DBGrid1,'ALANADI').PickList.Add('EKLENECEK ELEMAN2');
......
......
....
end
else
begin
FindColumn(DBGrid1,'ALANADI').PickList.clear;
end;
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: DbGrid'de yalnızca bir hücrede picklist

Mesaj gönderen PROGRAMADOR »

Merhaba,

Yanıtlarınız için teşekkür ederim. Aşağıdaki kodu yazdım ama maalesef picklist çıkmadı.

Kod: Tümünü seç

unit ufrmAdvSet;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.DBCtrls,
  Vcl.Grids, Vcl.DBGrids, Data.DB, ABSMain, Datasnap.DBClient;

type THackDBGrid = class(TDBGrid);

type
  TfrmAdv = class(TForm)
    GroupBox1: TGroupBox;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    DataSource1: TDataSource;
    ABSTable1: TABSTable;
    ClientDataSet1: TClientDataSet;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmAdv: TfrmAdv;

implementation

{$R *.dfm}

uses
uConf, uMain,uIOConsts;

function FindColumn(const DBGrid: TDBGrid; const FName: string): TColumn;
var i: Integer;
begin
  Result := nil; i := 0;
  while not Assigned(Result) and (i < DBGrid.Columns.Count) do begin
    if AnsiCompareText(DBGrid.Columns[i].FieldName, FName) = 0 then
      Result := DBGrid.Columns[i];
    Inc(i);
  end;
end;



procedure TfrmAdv.FormCreate(Sender: TObject);
var
db: TABSDatabase;
q: TABSQuery;
i:integer;
begin
  DB := TABSDatabase.Create(nil);
  Q:=TABSQuery.Create(nil);

  db.DatabaseName:=DBName;
  db.DatabaseFileName:=app_path+DBPath;
  db.Open;


  ABSTable1.DatabaseName:=db.DatabaseName;
  ABSTable1.TableName:='settings';
  ABSTable1.Active:=True;
  DataSource1.DataSet:=ABSTable1;
  DBGrid1.DataSource:=DataSource1;
  DBNavigator1.DataSource:=DataSource1;

  DBGrid1.Columns[0].Visible :=False;
  DBGrid1.Columns[1].Width:=150;
  DBGrid1.Columns[1].ReadOnly:=true;
{
  for i:=0 to dbgrid1.DataSource.DataSet.RecordCount-1 do begin
     //DBGrid1.DataSource.DataSet.RecNo

  end;  }


  if dbgrid1.DataSource.DataSet.Fieldbyname('ConfKey').asString='ProgramLanguage' then
  begin
    FindColumn(DBGrid1,'ConfValue').PickList.Add('Turkish');
    FindColumn(DBGrid1,'ConfValue').PickList.Add('English');
    FindColumn(DBGrid1,'ConfValue').PickList.Add('Spanish');

  end
  else
  begin
    FindColumn(DBGrid1,'ConfValue').PickList.clear;
  end;

end;

end.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: DbGrid'de yalnızca bir hücrede picklist

Mesaj gönderen PROGRAMADOR »

White Rose yazdı:dbgridde istediğiniz colonu seçip picklist özelliğinden ekleyin
Ben tüm kolona picklist eklemek istemiyorum. Kolon içinde yalnızca bir hücreye eklemek istiyorum.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: DbGrid'de yalnızca bir hücrede picklist

Mesaj gönderen NewMember »

mesajımda yazdığı şekilde kullanırsan çıkacaktır.
Bizzat kullanıyorum bu kodu.
Cevapla