Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
CxGrid FilterRow Like
#1
Tongue 
Merhaba,
Mevcutta CxGridde kalıtım alan bir nesnede FilterRow özelliğini kullanmaktayım. Hücrede yapılan aramalarda iki tarafada Like %aranan% koyma özelliğini görememekteyim. 

1680OD.png

qd5nOW.png

GridView özellikleri
v6O7vR.png
V9kR1r.png

Gridin mevcutta böyle bir özelliği varmıdır, var ise yardımlarınızı beklemekteyim. SupportedLike açık iken tek taraflı like çalışmakta
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#2
@narkotik benim bildiğim kadarı ile yok siz aradığınız şeyi yazdıktan sonra PercentWildchard kısmındaki değeride yazıyorsunuz
Ben genelde bu değeri % yerine * yapıyorum kullanıcı ahmet, *ahmet yada ahmet* şeklinde yazarak aramış oluyor
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#3
(11-05-2019, Saat: 19:35)adelphiforumz Adlı Kullanıcıdan Alıntı: @narkotik  benim bildiğim kadarı ile yok siz aradığınız şeyi yazdıktan sonra PercentWildchard kısmındaki değeride yazıyorsunuz
Ben genelde bu değeri % yerine * yapıyorum kullanıcı ahmet, *ahmet yada ahmet* şeklinde yazarak aramış oluyor

Açıkcası beni çözmüyor, konu ile ilgili bir araştırma yapayım
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#4
Sorun çözülmüştür.

  TSKGridDBDataController = class (TcxGridDBDataController)
 private
   //
 protected
   procedure FilterChanged;override;
 end;


procedure TSKGridDBDataController.FilterChanged;
var
 xValue  : string;
 xColumm : TcxGridDBColumn;
 xView   : TcxGridDBTableView;
begin
 inherited;
 Try
   if GetGridView <> nil then
   begin
     xView := TSKGridView(Self.GetGridView);
     xView.BeginUpdate;
     Filter.BeginUpdate;
     with xView,ViewData do
     begin
        if FilterRow.Focused then
        begin
          xColumm := TcxGridDBColumn(Controller.FocusedColumn);
          if (xColumm <> nil) and (xColumm.PropertiesClassName = '') and (xColumm.DataBinding.Field.DataType = ftString) then
          begin
            xValue := VarToStr(FilterRow.Values[xColumm.Index]);
            if (Length(xValue)> 0) and (AnsiPos('%',xValue) = 0) then
              FilterRow.Values[xColumm.Index] := '%' + xValue + '%';
          end;
        end;
     end;
     Filter.EndUpdate;
     xView.EndUpdate;
   end;
 Except
   // Olası bir hatayı kes
 End;
end;
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#5
(12-05-2019, Saat: 01:08)narkotik Adlı Kullanıcıdan Alıntı: Sorun çözülmüştür.

  TSKGridDBDataController = class (TcxGridDBDataController)
 private
   //
 protected
   procedure FilterChanged;override;
 end;


procedure TSKGridDBDataController.FilterChanged;
var
 xValue  : string;
 xColumm : TcxGridDBColumn;
 xView   : TcxGridDBTableView;
begin
 inherited;
 Try
   if GetGridView <> nil then
   begin
     xView := TSKGridView(Self.GetGridView);
     xView.BeginUpdate;
     Filter.BeginUpdate;
     with xView,ViewData do
     begin
        if FilterRow.Focused then
        begin
          xColumm := TcxGridDBColumn(Controller.FocusedColumn);
          if (xColumm <> nil) and (xColumm.PropertiesClassName = '') and (xColumm.DataBinding.Field.DataType = ftString) then
          begin
            xValue := VarToStr(FilterRow.Values[xColumm.Index]);
            if (Length(xValue)> 0) and (AnsiPos('%',xValue) = 0) then
              FilterRow.Values[xColumm.Index] := '%' + xValue + '%';
          end;
        end;
     end;
     Filter.EndUpdate;
     xView.EndUpdate;
   end;
 Except
   // Olası bir hatayı kes
 End;
end;

xView := TSKGridView(Self.GetGridView);    TSKGridView ???
Cevapla
#6
(12-05-2019, Saat: 11:46)faktoral Adlı Kullanıcıdan Alıntı:
(12-05-2019, Saat: 01:08)narkotik Adlı Kullanıcıdan Alıntı: Sorun çözülmüştür.

  TSKGridDBDataController = class (TcxGridDBDataController)
 private
   //
 protected
   procedure FilterChanged;override;
 end;


procedure TSKGridDBDataController.FilterChanged;
var
 xValue  : string;
 xColumm : TcxGridDBColumn;
 xView   : TcxGridDBTableView;
begin
 inherited;
 Try
   if GetGridView <> nil then
   begin
     xView := TSKGridView(Self.GetGridView);
     xView.BeginUpdate;
     Filter.BeginUpdate;
     with xView,ViewData do
     begin
        if FilterRow.Focused then
        begin
          xColumm := TcxGridDBColumn(Controller.FocusedColumn);
          if (xColumm <> nil) and (xColumm.PropertiesClassName = '') and (xColumm.DataBinding.Field.DataType = ftString) then
          begin
            xValue := VarToStr(FilterRow.Values[xColumm.Index]);
            if (Length(xValue)> 0) and (AnsiPos('%',xValue) = 0) then
              FilterRow.Values[xColumm.Index] := '%' + xValue + '%';
          end;
        end;
     end;
     Filter.EndUpdate;
     xView.EndUpdate;
   end;
 Except
   // Olası bir hatayı kes
 End;
end;

xView := TSKGridView(Self.GetGridView);    TSKGridView ???
TcxGridDBTableView
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#7
Teşekkür ederim. Son bir yardım daha isteyeceğim. Bunu cxgrid de nasıl kullanacağız.
Cevapla
#8
(12-05-2019, Saat: 16:04)faktoral Adlı Kullanıcıdan Alıntı: Teşekkür ederim. Son bir yardım daha isteyeceğim. Bunu cxgrid de nasıl kullanacağız.

Merhaba,
@narkotik, TcxGridDBDataController sınınfından yeni bir sınıf (TSKGridDBDataController) türetmiştir. Yine aynı sınıfa ait FilterChanged olayını ezmiştir. Yani bu olayı çağırmış ve yazdığı yeni entegrasyonlarla (kodlarla) çalışmaya zorlamıştır.
TcxGridDBDataController standart sınıfı yerine kendi TSKGridDBDataController sınıfını (bileşenini) kullandığında, herhangi bir ek kod kullanmadan yeni filtered özelliği her cxGrid'inde otomatik olarak çalışacaktır. 
Yani herhangi bir kullanım biçimi yok. Bir bileşenden türettiği yeni bir bileşene ek özellikler katmıştır.
Cevapla
#9
@"Fesih ARSLAN"    @narkotik  Teşekkür ederim.
Cevapla
#10
Merhabalar, 
konu eski ama farklı bir çözüm öneriside ben sunayım arşivimizde bulunsun.
cxgridde rowfilter alanında default olarak gelen equal operatörünü kodla runtime like olarak değiştirme konusunda;
formun on-show/create olayında 

cxGridDBTableView2.FilterRow.OperatorCustomization := True; // ile kullanıcılara manuel değiştirme imkanı da sunabiliyoruz.
      
 for i := 0 to cxGridDBTableView2.ItemCount-1 do
 TcxGridDBColumn(cxGridDBTableView2.Items[i]).Options.FilterRowOperator := foContains;

foContains operatörü like gibi çalışıyor ancak % * vb karakter istemiyor.
dolayısıyla sütun bazlı aramalarda direk aradığımızı buluyor.
Sorsaydı Bilirdi Sormuyor ki Bilsin.
Bilseydi Sorardı Bilmiyor ki Sorsun. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Cxgrid Konumunu Dinamik olarak Değiştirmek endmuh 4 500 09-12-2023, Saat: 17:49
Son Yorum: endmuh
  Cxgrid runtime oluşan sütünların format ve toplam alma ve query currensy true yapm hk diseqc 3 920 10-04-2023, Saat: 12:53
Son Yorum: diseqc
  CXGrid kayıt seçme cemakkus 3 1.023 20-12-2022, Saat: 08:59
Son Yorum: cemakkus
  cxgrid Excel içine sayfa sayfa export Etme Mesut 2 1.004 08-09-2022, Saat: 15:39
Son Yorum: Mesut
  Devexpress cxgrid gruplama bilgisi değiştirme cinarbil 3 1.186 18-07-2022, Saat: 08:42
Son Yorum: m_ekici



Konuyu Okuyanlar: 1 Ziyaretçi