2016-04-11 22 views
0

Devexpress araçlarını kullanıyorum. Aşağıda her bir denetimi bir formdaki temel olarak denetler ve değerin değişip değişmediğini kontrol ederek bir olay denetleyicisini kontrole ayarlar. form kapandığında bunun doğru olup olmadığını kontrol edecek ve eğer varsa, kaydetmeyi isteyin. Şimdi iyi çalışıyor, ama bir gridcontrol içinde bir gridview değiştiğini kontrol etmek istiyorum. gridview altında hücre kaynaklı olarak adlandırılan bir olay var. İşleyiciyi gridview.cellvaluechanged öğesine eklemek istiyorum, ancak doğrudan erişemiyorum. Bir ızgara kontrolünün içinde. Bu kod aracılığıyla nasıl erişebilirim? İşte Izgara görünümü düzenleme değerinin olay yönetimi yoluyla değişip değişmediğini kontrol etme

 'If TypeOf c Is GridControl Then 
     ' Dim cb As GridControl = CType(c, GridControl) 
     ' AddHandler cb.ViewCollection(0).GridControl ... dont know how to access gridview 

     'End If 

benim tam çözüm gridview çeki olmayan

Dim is_Dirty As Boolean = False 

Private Sub AddDirtyEvent(ByVal ctrl As Control) 

For Each c As Control In ctrl.Controls 
    If TypeOf c Is TextEdit Then 
     Dim tb As TextEdit = CType(c, TextEdit) 
     AddHandler tb.EditValueChanged, AddressOf SetIsDirty 

    End If 
    'If TypeOf c Is ComboBoxEdit Then 
    ' Dim cb As ComboBoxEdit = CType(c, ComboBoxEdit) 
    ' AddHandler cb.SelectedIndexChanged, AddressOf SetIsDirty 

    'End If 
    If c.Controls.Count > 0 Then 
     AddDirtyEvent(c) 
    End If 

Next 

End Sub 

Private Sub SetIsDirty(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    is_Dirty = True 
End Sub 

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs)  Handles Me.FormClosing 

If is_Dirty = True Then 
    Dim dr As DialogResult = MessageBox.Show("Do you want save changes before leaving?", "Closing Well Info", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) 
    If dr = Windows.Forms.DialogResult.Yes Then 
     SimpleButtonSave.PerformClick() 
      End If 
End If 

cevap

1

kullanımını bu çalışıyor:

If TypeOf c Is GridControl Then 
    For Each gv As GridView In CType(c, GridControl).Views 
     AddHandler gv.CellValueChanged, AddressOf SetIsDirty 
    Next 
End If 

veya GridControl 1 GridView varsa bu kullanın:

If TypeOf c Is GridControl Then 
    Dim gv As GridView = CType(c, GridControl).Views(0) 
    AddHandler gv.CellValueChanged, AddressOf SetIsDirty 
End If