1

Konu: grid kolonu olarak combo kullanımı.

Arkadaşlar en basit haliyle sorumu anlatmaya çalışayım.
Diyelim ki ilçeler tablosu var ve grid kontolünde İlçe_ID, İlçe_ADI ve İl_ID kolonlarımız var.
Bu gridde İl_ID kolonunda İl numaralarının değil de İller tablosundaki İl adlarının COMBOBOX içinde görülmesini,  seçilebilmesini, değiştirilebilmesini istiyorum. Ama database'e yazarken İlçeler tablosunda seçilen İlin İl_ID'sinin yazılmasını istiyorum.
En kolay nasıl gerçekleştirebilirim?

2

Re: grid kolonu olarak combo kullanımı.

-Combo koy bir tane
-Cift klikle kod penceresi acılsın
-Inıt kodunu sec

Visual Fox Pro
with this

.RowSourceype = 3
.RowSource = "select il_ad,il_id from iller order by 1 into cursor crsIller"
.BoundTo = .t.
.ColumnCount = 2
.ColumnWidths = "100,0"
.BoundColumn = 2
.ControlSource = "ilceler.il_id"
endwith

3

Re: grid kolonu olarak combo kullanımı.

Üstadım, ilgin için teşekkür ederim.
Dediğin gibi gridin bir kolonunu combo yaptım. Hem init içine yukarıdaki gibi yazarak denedim, hem de combo properties penceresinden aynı işlemleri yaptım ama grid penceresinde İl kodları olarak geliyor. Comboya tıklandığında İl isimleri gözüküyor, İli seçip bir sonraki kayıta geçtiğimde tekrar il kodu olarak gözüküyor. Grid'in tamamında kodları değil de il isimlerini görme şansımız var mı acaba ?

4 Son düzenleyen, cetinbasoz (09.10.2007 11:22:07)

Re: grid kolonu olarak combo kullanımı.

smile Dogrusu ben sadece mesaji okudum ve basliginda 'grid' oldugunu bile farketmedim. Grid icinde o haliyle kullanirsan ya column.sparse = .F. olacak ya da relation filan girecek isin icine. Benim tercihim 3. bir yol:

Visual Fox Pro
Public oForm

oForm = Createobject('comboingrid')
oForm.Show
 
Define Class comboingrid As Form
  Top = 0
  Left = 0
  Height = 350
  Width = 620
  DataSession=2
 
  Add Object grdorditems As Grid With ;
    Height = 300, ;
    Left = 10, ;
    Top = 10, ;
    Width = 600, ;
    Rowheight = 19,;
    RecordSource = "orditems", ;
    Name = "grdOrditems"
 
  Procedure Load
    Use _samples+'Data\orditems' Order Tag order_id
    Set Multilocks On
    CursorSetProp("Buffering",5,'orditems')
  Endproc
 
  Procedure Init
    With This.grdorditems.Column3
      .Bound = .F.
      .ControlSource = "(Iif(Seek(orditems.product_id,"+;
        "'products','product_id'),Products.prod_name,''))"
      .Width = 170
      .AddObject('comboincol','combobox')
      With .ComboIncol
        .BoundColumn = 2
        .BoundTo = .T.
        .ColumnCount = 2
        .ColumnWidths = "180,0"
        .RowSourceType = 3
        .RowSource = "select products.prod_name,product_id"+;
          " from products into cursor crsProducts order by 1"
        .SpecialEffect = 1
        .Style = 2
        .ControlSource = "orditems.product_id"
        .Visible = .T.
      Endwith
      .CurrentControl = 'comboincol'
    Endwith
  Endproc
Enddefine

5

Re: grid kolonu olarak combo kullanımı.

herkese merhaba
gridde combo kullanmayı deniyorum aşağıdaki gibi bir kod yazdım kısmen çalıştı fakat eksik kalan tarafları var

Visual Fox Pro
CREATE CURSOR crsuayk ( opsira c(5),seviye c(1),kod c(16),tanim c(70),miktar n(11,8),kalinlik n(6,2),bant n(6,2),hatve n(6,2),kalipgoz n(3)) 

 
WITH thisform.grid1
.recordsource = "crsuayk"
.column1.width = 55
.column2.width = 55
.column3.width = 180
.column4.width = 150
.........
ENDWITH
 
with Thisform.grid1.Column3
      .AddObject('cmbkod','ComboBox')
      .CurrentControl = 'cmbkod'
      .Sparse = .F.
      With .cmbkod
        .RowSourceType = 3
        .RowSource = 'select kod,tanim from kart into cursor crsMalkod'
        .Style = 2
        .ColumnCount = 2
        .BoundColumn = 2
        .ColumnWidths = "90,140"
        .Visible = .T.
       ENDWITH
   Endwith


kod seçme işlemini combodan yapabiliyorum, fakat grid teki column4' e yani tanım field'ına tanımı nasıl yazdıracağım

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

6

Re: grid kolonu olarak combo kullanımı.

.BoundColumn = 1

gibi geldi bana. Tanimin yazilmasi 'tekrar'. Bence yazma:


.Column4.ControlSource = '(crsMalKod.Tanim)'

Yine de yazmak istersen:

Combo'nun validinde ya da Lostfocus'da:

replace tanim with crsMalkod.Tanim in 'crsuayk'

7

Re: grid kolonu olarak combo kullanımı.

büyük sözü dinleyip yazmaktan vazgeçtim smile

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

8

Re: grid kolonu olarak combo kullanımı.

Selamlar;

Visual Fox Pro
replace tanim with crsMalkod.Tanim in 'crsuayk'


ile

Visual Fox Pro
replace crsuayk.tanim with crsMalkod.Tanim

arasında fark varmı?
Ben sürekli

Visual Fox Pro
Select crsuayk

replace crsuayk.tanim with crsMalkod.Tanim


şeklinde yapıyorum.

Bilmediğin Neyse Yanıldığındır.

9

Re: grid kolonu olarak combo kullanımı.

eğer başka aliaslar ile de işlem yapıyorsan, veya herhangi bir yerde SQL SELECT kullanıyorsan yazmakta fayda var, istem dışı başka aliasa geçtiğinde kayıt yapmaz ve hata mesajı da vermez...

VFP9 SP2