Skip to main content

Lookup

Bir veri kaynağındaki kayıtları arama penceresinde açıp kullanıcıya seçtiren nesnedir. Seçilen kaydın bir ya da birden çok kolonunu forma getirebilirsiniz. Personel, firma, ürün, masraf kodu gibi tanımlı bir listeden kayıt seçmek için kullanılır.

Değer tipi: object

Ne zaman kullanılır?

Kullanıcının elle yazması yerine hazır bir listeden kayıt seçmesi gerektiğinde idealdir: cari seçimi, personel seçimi, ürün/stok seçimi, proje kodu. Listeyi açılır kutu içine sığdırmak yeterliyse ComboBox daha hafiftir; Lookup ise çok kolonlu, aranabilir ve büyük veri kaynakları için uygundur.

Tasarımcı özellikleri

Bir Lookup seçildiğinde Özellik Görüntüleyici sekmelere ayrılır.

General

ÖzellikAçıklama
NameNesnenin koddaki adı (ör. Lookup1). Koddan bu adla erişirsiniz.
Field NameSeçilen değerin yazılacağı veritabanı alanının adı.

Label

Nesnenin yanındaki etiketi yönetir.

ÖzellikAçıklama
Caption / TextEtiketin yazısı (çok dilli olabilir).
PositionEtiketin yeri: solda (Left) veya üstte (Top).
Width / HeightEtiketin boyutu.
FontYazı tipi, kalın / italik / altı çizili.
Show ColonEtiketin sonuna iki nokta (:) ekler.
Horizontal Align / Vertical AlignEtiketin hizası.
VisibleEtiketi gösterir veya gizler.

Data Source

Lookup'ın hangi kayıtları göstereceğini bu sekme belirler. Veri kaynağı olmadan nesne boş açılır.

ÖzellikAçıklama
DataSourceKayıtların geldiği veri kaynağı (genellikle bir SQL veri kaynağı). Arama penceresinde listelenecek satırlar buradan gelir.
ItemsVeri kaynağı yerine elle sabit bir liste vermek için kullanılır. Kısa, değişmeyen listelerde pratiktir.

Behavior

ÖzellikAçıklama
AllowClearKullanıcının seçimi temizlemesine izin verir (yanındaki temizleme düğmesi).
GridOptionsArama penceresindeki tablonun ayarları (kolonlar, sayfalama, arama).
ReadOnlyNesneyi salt okunur yapar; seçim değiştirilemez.
RequiredSeçimi zorunlu yapar; boşsa form kaydedilmez.
RowsSeçilen satır(lar)ın kolon değerlerine erişilen koleksiyon.
SelectedItemsO an seçili olan kayıt veya kayıtlar.
ShowOnArama penceresinin nasıl açılacağını belirler.
TabIndexTab tuşuyla geçiş sırasını belirler.
ValueTypeSeçilen değerin saklanacağı veri türü (metin, sayı vb.).

Appearance

ÖzellikAçıklama
Visible / Client VisibleNesnenin görünürlüğü.
Enabled / Client EnabledNesnenin aktif olup olmadığı.
PlaceholderSeçim yapılmadan önce görünen soluk ipucu yazısı.
TextSeçilen kaydın ekranda görünen metni.
Text AlignYazının hizası.
TitleNesnenin başlığı (çok dilli olabilir).
ValueSeçilen kayıt(lar)ın değeri (List<Object>).
Size TypeGenişlik davranışı (sabit / esnek).

Olaylar

Bir nesne açılırken olaylar belirli bir sırayla tetiklenir; kullanıcı seçim yapınca da ayrı olaylar çalışır. Doğru kodu doğru olaya yazmak işinizi kolaylaştırır.

Açılış sırası: OnInitOnLoadOnDataLoadOnPreRenderOnRender

Kullanıcı seçim yapınca: arama düğmesine basınca LookupButtonClick, seçim kesinleşmeden önce ValueChanging, kesinleşince ValueChanged

Olaylar iki tarafta çalışabilir: sunucu olayları C# kodunda, istemci olayları tarayıcıdaki TypeScript kodunda.

Sunucu olayları (Server)

OlayNe zaman çalışır
OnInitForm açılırken nesne oluşturulduğunda, en başta.
OnLoadOnInit'in hemen ardından, nesne yüklenince.
OnRenderNesne ekrana çizilirken.
LookupButtonClickKullanıcı arama düğmesine basıp pencereyi açtığında.
ValidatingEventSeçim doğrulanırken; geçersiz seçimi burada engelleyebilirsiniz.
ValueChangingSeçim değişmeden hemen önce (iptal edilebilir).
ValueChangedSeçim kesinleştiğinde. En sık kullanılan olaydır.
TextChanging / TextChangedGörünen metin değişmeden önce / sonra.

İstemci olayları (Client)

Sunucudaki olaylara ek olarak tarayıcı tarafında şunlar da vardır:

OlayNe zaman çalışır
OnDataLoadNesnenin verisi yüklendiğinde.
OnPreRenderNesne ekrana çizilmeden hemen önce.
OnClick / OnDoubleClickNesneye tıklanınca / çift tıklanınca.
OnPropertyChanging / OnPropertyChangedBir özellik kodla değiştirilmeden önce / sonra.
Olay parametreleri

ValueChanging olayının parametresi (args TS, e C#) şunları taşır:

  • newValue / NewValue — seçilmek istenen yeni değer
  • oldValue / OldValue — önceki değer
  • cancel / Canceltrue yapılırsa seçim iptal edilir (yalnızca Changing olaylarında)

ValueChanged olayında cancel yoktur (seçim artık gerçekleşmiştir).

Kod örnekleri

Bir Lookup'a üç yerden erişebilirsiniz. Sunucu örnekleri turuncu, istemci örnekleri kırmızı çerçevelidir. Lookup'ın değeri bir nesne (List<Object>) olduğundan, çoğu zaman seçilen değeri doğrudan değil, satırın kolonları üzerinden okursunuz.

Form kodu (C#, sunucu)

Form kodunda nesneye doğrudan adıyla erişirsiniz:

// Seçilen değeri oku
var secilen = Lookup1.Value;

// Seçilen satırın bir kolonunu oku
string firmaAdi = Lookup1.Rows[0]["FIRMA_ADI"].ToString();

// Görünen metni oku
string metin = Lookup1.Text;

Akış (Flow) kodu (C#, sunucu)

Akış kodunda nesneye Document1.Controls üzerinden erişirsiniz:

// Seçilen değeri oku
var secilen = Document1.Controls["Lookup1"].Value;

// Görünen metni oku
string metin = Document1.Controls["Lookup1"].Text;

İstemci kodu (TypeScript, tarayıcı)

İstemci tarafında nesnelere this. ile erişilir ve özellik adları küçük harfle yazılır (value, text):

// Seçilen değeri oku
const secilen = this.Lookup1.value;

// Görünen metni oku
const metin = this.Lookup1.text;

// Seçimi temizle
this.Lookup1.value = null;
.Value mi Rows mı?

.Value seçilen kaydın saklanan değeridir, .Text ise ekranda görünen metindir. Seçilen kaydın diğer kolonlarına (firma adı, vergi no gibi) ulaşmak için .Rows koleksiyonunu kullanın. Forma birden çok alan getirecekseniz değeri ValueChanged içinde okuyup ilgili nesnelere yazmak en temiz yoldur.

Örnek: seçimi doğrulama (ValueChanging)

ValueChanging seçim kesinleşmeden hemen önce çalışır; istemediğiniz bir seçimi burada iptal edebilirsiniz.

İstemci (TypeScript):

async Lookup1_OnValueChanging(args: Controls.EventArgs.IPropertyChangingEventArgs<any>) {
if (args.newValue == null) {
args.cancel = true; // Boş seçimi iptal eder
this.showMessage("Uyarı", "Lütfen bir kayıt seçin.", "Validation");
}
}

Sunucu (C#):

void Lookup1_OnValueChanging(object sender, PropertyChangingEventArgs<object> e)
{
if (e.NewValue == null)
{
e.Cancel = true;
ShowMessage("Uyarı", "Lütfen bir kayıt seçin.",
Bimser.CSP.FormControls.RuleManager.AlertType.Validation);
}
}

İpuçları

  • Seçilen kayıttan birden çok alan getireceğinizde değeri ValueChanged olayında okuyup ilgili TextBox'lara yazın; her alan için ayrı Lookup koymayın.
  • AllowClear açıkken kullanıcı seçimi temizleyebilir; bu durumda Value boş gelebileceği için kodunuzda boş kontrolü yapın.
  • Kısa ve değişmeyen listelerde DataSource yerine Items ile sabit liste vermek daha pratiktir.
  • Tek bir değer açılır kutuya sığıyorsa ComboBox daha hafif bir seçenektir.
Tüm tasarımcı özellikleri (tam liste)

General: Name, Field Name

Label: Caption, Text, Position, Left, Width, Height, Font (Bold / Italic / Underline), Ellipsis, Visible, Show Colon, Horizontal Align, Vertical Align, Mark Char, Mark Position

Data Source: DataSource, Items

Behavior: AllowClear, GridOptions, ReadOnly, Required, Rows, SelectedItems, ShowOn, TabIndex, ValueType

Appearance: ClientEnabled, ClientVisible, Enabled, Placeholder, SizeType, Text, TextAlign, Title, Value, Visible

Olaylar (Server): OnInit, OnLoad, OnRender, LookupButtonClick, ValidatingEvent, ValueChanging, ValueChanged, TextChanging, TextChanged

Olaylar (Client): OnInit, OnLoad, OnPreRender, OnRender, OnDataLoad, OnClick, OnDoubleClick, OnPropertyChanging, OnPropertyChanged, LookupButtonClick, ValidatingEvent, ValueChanging, ValueChanged, TextChanging, TextChanged