Arkadaşlar şöyle bir sıkımtım oldu. cx grid üzerinde 2 tane sütunum var. sağdaki sütuna girilebilecek değerleri lookupcombox'ile seçilebilir yaptım. Ancak seçilebilecek değerler soldaki sütunla ilişkili. bu nedenle lookupcomboboxnın listsource kısmına verileri sağlayan tabloyu master-detail yaptım. Şöyle bir problem oluştu. cxgridde satırı değiştirdiğimde daha önce seçmiş olduğum değerler siliniyor. Sanki her satırda bir lookupcombobox yokmuş da hepsi aynı lookupcomboboxmış gibi davranıyor. master-detail ilişkisini iptal edince düzeliyor.
Bununla ilgili, tablonun range özelliğini kullanarak bir düzeltme yapılabildiğini okudum ama benim tablo nesnemde range yok (zeos). Başka fikri olan varsa paylaşırsa sevinirim.
cxgrid lookupcombobox ve masterdetail ÇÖZÜLDÜ
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
cxgrid lookupcombobox ve masterdetail ÇÖZÜLDÜ
En son mkysoft tarafından 05 Ağu 2006 08:27 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
GridView nesnesinin OnEditing olayına;
OnInitEdit olayına ise;
Dikkat edilmesi gereken nokta şu;
lookup nesnesinde Listfield olarak mutlaka filtreleme yapılacak field'da bulunmalıdır. Bu field'ın genişliğini 0 yaparak görünmesini engelleyebilirsiniz.
Emeği geçenlere teşekkürler.
NOT: Devexpress knowledge bölümünde KB334 numarası ile anlatılmış çözümden faydalanılmıştır.
Kod: Tümünü seç
var
DC: TcxGridDBDataController;
idxClass: Integer;
begin
DC := TcxGridDBTableView(Sender).DataController;
if TcxGridDBColumn(AItem).DataBinding.FieldName = 'lookup koyulan field' then
begin
idxClass := DC.GetItemByFieldName('filtreleme yapılacak değeri içeren field').Index;
AAllow := not VarIsSoftNull(DC.Values[DC.FocusedRecordIndex, idxClass]);
end
Kod: Tümünü seç
var
MedClassValue: Variant;
colMedClassIndex: Integer;
DC: TcxGridDBDataController;
LGrid: TcxCustomLookupDBGrid;
colClassID: TcxLookupDBGridColumn;
begin
DC := TcxGridDBDataController(Sender.DataController);
colMedClassIndex := DC.GetItemByFieldName('filtreleme yapılacak değeri içeren field').Index;
MedClassValue := DC.Values[DC.FocusedRecordIndex, colMedClassIndex];
if AItem = gridview_lookup_olan_sütun then
begin
LGrid := TcxLookupComboBox(AEdit).Properties.Grid;
colClassID := LGrid.Columns.ColumnByFieldName('filtreleme yapılacak değeri içeren field');
with LGrid.DataController.Filter do
begin
Root.AddItem(colClassID, foEqual, MedClassValue, VarToStr(MedClassValue));
Active := True;
end;
end;
lookup nesnesinde Listfield olarak mutlaka filtreleme yapılacak field'da bulunmalıdır. Bu field'ın genişliğini 0 yaparak görünmesini engelleyebilirsiniz.
Emeği geçenlere teşekkürler.
NOT: Devexpress knowledge bölümünde KB334 numarası ile anlatılmış çözümden faydalanılmıştır.
- ahmet_sinav
- Üye
- Mesajlar: 263
- Kayıt: 17 Nis 2004 07:44
- Konum: İzmir Yeşilyurt Ulu Cami
- İletişim:
iyi çalışmalar hocam
Dediklerinizi aynen uyguladım. Verdiğiniz komut satırlarını aşağıdaki gibi konfigure ettim.
tasinir_hareket_tasinir_id kolonu tasinir_hareket_muhasebe kolonuna göre filtrelenmesi gerekiyor. tabloda gerekli veriler mevcut, dediğiniz şekilde filtre uygulanacak alanıda listfields bölümüne ekledim fakat ilgili kolona veri girişi yapmaya çalıştığım vakit lookupdbgridte herhangibir listitem görüntülenmiyor. çalışma esnasında herhangibir hata da almıyorum. Filtreleme işlemini kaldırdığım vakit veriler geliyor. Fakat filtreme işleminden sonra herhangibir değer dönmüyor. Filtreleme için gelen değeri kontrol ettim doğru dönüyor.Bir yerleri atlıyorum galiba.
Yardımlarınız için teşekkürler ;
Saygılar;
Dediklerinizi aynen uyguladım. Verdiğiniz komut satırlarını aşağıdaki gibi konfigure ettim.
Kod: Tümünü seç
var
DC: TcxGridDBDataController;
idxClass: Integer;
begin
DC := TcxGridDBTableView(Sender).DataController;
if TcxGridDBColumn(AItem).DataBinding.FieldName = 'tasinir_hareket_tasinir_id' then
begin
idxClass := DC.GetItemByFieldName('tasinir_hareket_muhasebe').Index;
AAllow := not VarIsSoftNull(DC.Values[DC.FocusedRecordIndex, idxClass]);
end
end;
Kod: Tümünü seç
var
MedClassValue: Variant;
colMedClassIndex: Integer;
DC: TcxGridDBDataController;
LGrid: TcxCustomLookupDBGrid;
colClassID: TcxLookupDBGridColumn;
begin
DC := TcxGridDBDataController(Sender.DataController);
colMedClassIndex := DC.GetItemByFieldName('tasinir_hareket_muhasebe').Index;
MedClassValue := DC.Values[DC.FocusedRecordIndex, colMedClassIndex];
if AItem = dbGrdHareketDBTableView1tasinir_hareket_tasinir_id then
begin
LGrid := TcxLookupComboBox(AEdit).Properties.Grid;
colClassID := LGrid.Columns.ColumnByFieldName('tasinir_hareket_muhasebe');
with LGrid.DataController.Filter do
begin
Root.AddItem(colClassID, foEqual, MedClassValue, VarToStr(MedClassValue));
Active := True;
end;
end;
end;
Yardımlarınız için teşekkürler ;
Saygılar;
İmam Süleyman Yakub <==> Molla Mustafa Mansur
- ahmet_sinav
- Üye
- Mesajlar: 263
- Kayıt: 17 Nis 2004 07:44
- Konum: İzmir Yeşilyurt Ulu Cami
- İletişim:
hocam başka bir yöntemle olayı çözdüm
Hakan Can'ın bahsettiği OnInıtPopup eventını kurcaladım biraz sizin kodlarıda alarak birleştirdim. aşağıdaki gibi bir şey çıktı. şu an problemsiz bir şekilde çalışıyor..
Saygılar;
Hakan Can'ın bahsettiği OnInıtPopup eventını kurcaladım biraz sizin kodlarıda alarak birleştirdim. aşağıdaki gibi bir şey çıktı. şu an problemsiz bir şekilde çalışıyor..
Kod: Tümünü seç
procedure TfrmTasinirIslemFisi.dbGrdHareketDBTableView1tasinir_hareket_tasinir_idPropertiesInitPopup(
Sender: TObject);
var
lcbProperties: TcxLookupComboBoxProperties;
stFilter : string;
i: integer;
DC: TcxGridDBDataController;
MedClassValue: Variant;
colMedClassIndex: Integer;
begin
DC := TcxGridDBDataController(dbGrdHareketDBTableView1.DataController);
colMedClassIndex := DC.GetItemByFieldName('tasinir_hareket_muhasebe').Index;
MedClassValue := DC.Values[DC.FocusedRecordIndex, colMedClassIndex];
lcbProperties := TcxLookupComboBox(Sender).ActiveProperties;
with lcbProperties.Grid.DataController do
begin
Filter.Root.AddItem(Grid.Columns[0], foEqual,MedClassValue, '');
Filter.Active := True;
end;
end;
İmam Süleyman Yakub <==> Molla Mustafa Mansur