CXGrid String & DB Grid olarak ayni anda kullanabilme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Hakan bey teşekkür ederim cevabınız için ancak lookupı kullanamıyorum ben neden diyeceksiniz lookupa ButtonEdit koyamıyorum. Lookup işimi tam olara göremiyor çünkü açılacak 2. tabloda dünya kadar bilgi var.. yani kişi sadece görmek değil seçerken değiştirmek de isteyebilir yani o bakımdan mutlaka benim buttonEdit kullanmam lazim..
Hakan Can yazdı:Bence OnGetText'le falan uğraşma. İşini iyice karıştıracaksın.

Şöyle bir yöntem izleyebilirsin:

LookupCombox kullan (zaten tavsiye edilmiş). İstediğin kadar kolonu gösterebiliyorsun. Daha birçok özelliği var.
Eğer kullanıcının lookup tablonun tamamını görmesini istiyorsan OnInitPopup eventine şuna benzer bir kod yazarsın:

Kod: Tümünü seç

procedure TMainLookupDataModule.cxEdtRep1LookupComboBoxItemMAINPropertiesInitPopup(Sender: TObject);
begin
  if GetKeyState(VK_LMENU) >= 0 then Exit; //Eğer sol ALT tuşuna basmamışsa normal lookupcombobox görünecek

  with TcxLookupComboBox(Sender) do
  try
    //Burada ilgili formu gösterip istediğiniz işlemleri yaptırırsınız
    //
    //
  finally
    Abort; //Lookupcombobox'ın görünmemesini sağlamak için
  end;
end;
İyi çalışmalar.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

SONUNDA HALLETTIM :)

Malzemeler.
2 Kilo Unbound Kolon (Button Edit olacak)
1 Kilo Lookup Kolon ( InVisible olacak)

Tarifi aşağıda hohohoy :D Deneme tabi asagidaki ama iste ayni mantik oldugundan cozulebiliyor..

Kod: Tümünü seç

procedure TForm1.UnBoundKoduGetDataText(Sender: TcxCustomGridTableItem;
  ARecordIndex: Integer; var AText: String);
var
s : string;
begin
if BandedTableView.DataController.DisplayTexts[ARecordIndex,OgrKodu.index] <> null then
Atext := BandedTableView.DataController.DisplayTexts[ARecordIndex,OgrKodu.index];
end;

procedure TForm1.UnBoundKoduGetDisplayText(Sender: TcxCustomGridTableItem;
  ARecord: TcxCustomGridRecord; var AText: String);
begin
if BandedTableView.DataController.DisplayTexts[ARecord.Index,OgrKodu.index] <> null then
Atext := BandedTableView.DataController.DisplayTexts[ARecord.Index,OgrKodu.index];
end;

procedure TForm1.UnBoundKoduPropertiesValidate(Sender: TObject;
  var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
    ADOQuery1.Close;
    AdoQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := 'SELECT REFNO FROM ogretmen WHERE KODU = :KODU';
    adoquery1.Parameters.ParamByName('KODU').value := DisplayValue;
    Adoquery1.Active := true;
    if AdoQuery1.RecordCount > 0 then
    begin
        ogretmen.Close;
        ListeQuery.Edit;
        ListeQueryogretmenrefno.AsInteger := ADOQuery1.Fieldbyname('REFNO').AsInteger;
        ogretmen.Open;
    end else
    begin
        ErrorText := 'öğretmen bulunamadı';
        Error := True;
    end;
end;
Cevapla