1

Konu: Griddeki record sıralamasını değiştirmek

Merhaba.
Bir gridin içindeki satırları kullanıcıya sıralatmak istiyorum. aynı 'create table' dediğimizde fieldleri belirlerken mevcut fieldlerin sıralarını değiştirmemize sistemin izin verdiği gibi.  Sürükleyerek sırayı değiştirebiliyoruz.  Buradaki sıralamayı kullanarak diğer listeler için  kolon sıralamarını kullanıcıya değiştirtmek istiyorum. 

Şimdiden teşekkür ederim...

2

Re: Griddeki record sıralamasını değiştirmek

muhtemelen sütun kadar basit değil.

çözüm olarak tabloda en sona 1 index kolonu açılabilinir -
CREA TABLE xxx  (..., siraindex I )
INDE ON siraindex TAG siraindex

gridde de en sonda 2 düğmeli bir Commanbuttongroup CurrentControl olarak atanarak:
mygrid.Column9.ControlSource=""  && son kolon ile data değişmesin

CommandGroup1.CommandYukari.Click && Evente :  satır yukarı taşınsın
REPL xxx.siraindex WITH xxx.siraindex -1 IN xxx

CommandGroup1.CommandAşaği.Click && Evente : satır aşağı taşınsın
REPL xxx.siraindex WITH xxx.siraindex +1 IN xxx
...myGrid.Refresh

diye aklıma geldi - belki Commanbuttongroup gerekmeden herhangi bir yeri çift tıklayarak da aynı kodlar olabilir :
..mygrid.Column1.Text1.DblClick  && Evente :  satır yukarı taşınsın
REPL xxx.siraindex WITH xxx.siraindex -1 IN xxx
...myGrid.Refresh

VFP9 SP2

3

Re: Griddeki record sıralamasını değiştirmek

Bu Ali'nin dedigi gibi:

Visual Fox Pro
PUBLIC oform

oForm=Createobject('form1')
oForm.Show
 
Define Class form1 As Form
  DataSession = 2
  Height = 215
  Width = 457
 
  Add Object command1 As CommandButton With ;
    Top = 36, ;
    Left = 360, ;
    Height = 27, ;
    Width = 84, ;
    Caption = "Down", ;
    Name = "Command1"
 
  Add Object command2 As CommandButton With ;
    Top = 72, ;
    Left = 360, ;
    Height = 27, ;
    Width = 84, ;
    Caption = "Up", ;
    Name = "Command2"
 
  Procedure Init
    This.AddObject('grdemployee','myGrid')
    With This.grdEmployee
      .RecordSource = "crsTest"
      .SetAll('DynamicBackColor',;
        '(iif(Recno()=this.nRec,'+;
        Str(.Columns(1).Text1.SelectedBackColor)+;
        ',0xFFFFFF))')
      .SetAll('DynamicForeColor',;
        '(iif(Recno()=this.nRec,'+;
        Str(.Columns(1).Text1.SelectedForeColor)+',0))')
      .Visible = .T.
      .RecChange()
    Endwith
  Endproc
 
  Procedure Load
    Select  *, 0x7FFFFFFF As sorter ;
      From (_samples+'data\employee') ;
      Order By last_name ;
      Into Cursor crs1 nofilter
    Use Dbf('crs1') In 0 Again Alias 'crsTest'
    Use In 'crs1'
    Use In 'employee'
    Select crsTest
    Replace All sorter With Recno()
    Index On sorter Tag sorter
  Endproc
 
  Procedure command1.Click
    If sorter=Reccount()
      Return
    Endif
    With Thisform.grdEmployee
      lnRec = Recno(.RecordSource)
      Skip In (.RecordSource)
      Replace sorter With sorter-1 In .RecordSource
      Go lnRec
      Replace sorter With sorter+1 In .RecordSource
      lnSorter = Eval(.RecordSource+'.sorter')
      Thisform.LockScreen = .T.
      Locate
      .Refresh
      =Seek(lnSorter, .RecordSource, 'sorter')
      .RecChange()
      *.Refresh
      Thisform.LockScreen = .F.
    Endwith
  Endproc
 
  Procedure command2.Click
    If sorter<=1
      Return
    Endif
    With Thisform.grdEmployee
      lnRec = Recno(.RecordSource)
      Skip - 1 In (.RecordSource)
      Replace sorter With sorter+1 In .RecordSource
      Go lnRec
      Replace sorter With sorter-1 In .RecordSource
      .RecChange()
      *      .Refresh
    Endwith
  Endproc
Enddefine
 
Define Class myGrid As Grid
  nRec = 0
 
  Procedure AfterRowColChange
    Lparameters nCol
    This.RecChange
  Endproc
 
  Procedure RecChange
    This.nRec = Recno(This.RecordSource)
    This.Refresh()
  Endproc
Enddefine

4

Re: Griddeki record sıralamasını değiştirmek

İşim fazlasıyla görüldü. Teşekkür ederim.