2016-04-17 4 views
0

GD Alle setzen,Wie die CheckBox Spalte in Datagridview-Wert auf true

Ich habe, sich nach einer Lösung für meine unten Herausforderung.

Ich habe ein Formular mit einem ungebundenen Datagridview, das dg hat eine hinzugefügte Spalte, die Benutzer eine Methode auswählen kann verwendet werden. Der Status des Ereignisses wird in einer Datenbank gespeichert, und nach dem erneuten Öffnen des Formulars überprüft der Code, ob das Ereignis in einem "offenen" Zustand ist. Wenn dies der Fall ist, vergleicht er die zuvor ausgewählte Methode mit den Methoden im Datagrid zuvor aktivierte Methode als 'ausgewählte' Methode.

Dennoch scheinen kann ich nicht diese leider zur Arbeit zu kommen ...

Der Code unten Methoden in der dg und vergleicht die Werte durchläuft, wenn es die methodId trifft es den Wert setzen soll "auf True 'oder auf den TrueValue sowieso.

Dies wird initialisiert, wenn die Datenbankprüfung true zurückgibt und nach vollständiger Initialisierung des Formulars, wobei session.methodID ein Feld in der zurückgegebenen LINQ-Abfrage ist.

For Each r As DataGridViewRow In dgMethods.Rows 

    If r.Cells(1).Value = session.methodID Then 
     Dim c As DataGridViewCheckBoxCell = r.Cells(0) 
     c.Value = c.TrueValue 
    End If 

Next 

Leider setzt dies das Kontrollkästchen nicht auf "Überprüft". Die Schleife läuft und wertet den Vergleich zwischen r.Cells(1).Value und session.methodID korrekt aus und löst korrekt aus.

Die interessante Sache ist, wenn ich eine ähnliche Schleife nach dem Ereignis 'CellContentClick' mache, tut es genau das, was erwartet wird. (Das folgende Beispiel setzt alle Kontrollkästchen Werte geprüft)

Private Sub dgMethods_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgMethods.CellContentClick 

    'Only single selection allowed, so clear table before submitting new selection 
    For Each r As DataGridViewRow In dgMethods.Rows 
     Dim c As DataGridViewCheckBoxCell = r.Cells(0) 
     c.Value = c.TrueValue 

    Next 

    dgMethods.CommitEdit(DataGridViewDataErrorContexts.Commit) 

End Sub 

Also, anscheinend gibt es einen Unterschied in dem Zustand zwischen nur der Schleife Aufruf auf den dgMethods und wenn das dgMethods.CellContentClick Ereignis ausgelöst hat, aber ich weiß nicht, was ein ? Es gibt viele Posts, die versuchen, die CheckBox-Spalte zu setzen, aber ich konnte keine von ihnen zum Laufen bringen.

Hat jemand eine Idee?

Ich würde Ihre Vorschläge begrüßen?

Antwort

0

GD Alle,

Nach der Suche weiter ich auf das folgende interessante Verhalten kam.

Der Methodenauswahlprozess ist Teil eines Formulars mit dem Namen "frmAddEvent", das Formular frmAddEvent wird aus einem Hauptformular aufgerufen, das die Routine unten verwendet.

Die neue Formularinstanz wird erstellt und anschließend mit einem öffentlichen Sub in der Formularklasse InitializeForm() gefüllt, die einen GUID-Parameter verwendet, um entsprechende Daten zum Festlegen der Formularfelder abzurufen.

Der Initialisierungsteil fragt mehrere Datentabellen ab und setzt die entsprechenden Felder in der neuen Formularinstanz ggf. korrekt. Teil dieser Einstellung ist die method Auswahl in der dgMethods Datagridview.

Es scheint, dass die Reihenfolge, in der Sie das Formular aufrufen macht den Unterschied, wie der folgende Code funktioniert perfekt:

If Not (isOpened(rsTankName.unqID)) Then 
    Dim newForm As New frmAddEvent() '(rsTankName) 

    newForm.Show() 
    newForm.InitializeForm(rsTankName) 
Else 

End If 

So der anruf newForm.InitializeForm(rsTankName)nach das newForm.Show Ereignis der Datagridview die festlegen kann CheckBoxColumn korrekt.

Wahrscheinlich, weil die tatsächliche CheckBox sich eigentlich nur auf dem Show Befehl erzeugt wird, trotz der Tatsache, dass es ‚verfügbar‘ als eine Zelle mit DataGridViewCheckBoxColumn Eigenschaften im Datagrid ist, unmittelbar nach dem New frmAddEvent das neue Formular-Instanz erstellt wurde. Die tatsächliche CheckBox und ihr entsprechender CheckedState wird nicht erstellt, bevor das Ereignis newForm.Show aufgerufen wird. Es scheint, dass beim Erstellen der CheckBox zur Anzeige (während des Ereignisses newForm.Show) kein Vergleich mit dem tatsächlichen Wert erfolgt.

Um die Checkbox-Spalte beim Initiieren eines neuen Formulars zu aktivieren, müssen Sie also das Show-Ereignis aufrufen, bevor Sie die DataGridViewCheckBoxColumn-Werte festlegen, andernfalls wird es nicht als "Checked" angezeigt.

0

war ich undestand Ihre Frage zu sein ... aber es gibt s einfache Art und Weise zu überprüfen und ändern den Zustand einer chechbox Zelle in einem Datagridview nicht sicher:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     For Each dr As DataGridViewRow In DataGridView1.Rows 
      If CBool(dr.Cells(0).Value) = True Then dr.Cells(0).Value = False : Continue For 
      If CBool(dr.Cells(0).Value) = False Then dr.Cells(0).Value = True 
     Next 

    End Sub 

In diesem Beispiel, wenn Sie darauf klicken Schaltfläche für jede Zeile in der Datagridview, überprüft die checkboxcell und setzen Sie den Wert auf FALSE oder TRUE abhängig von seinem Wert.

Hoffe das hilft dir.

Und lassen Sie mich noch einen Tipp. Wenn Sie Zugang zu den Zellen für seinen Namen anstelle seines Index seinen Namen verwenden, sollten es hilft Ihnen, Probleme zu vermeiden;)

+0

GD Ivan, Soweit mir bekannt ist, erlaubt die Spalte DataGridViewCheckBox keine booleschen 'True' oder 'False' Einstellungen. Sie können einen TrueValue- oder einen FalseValue-Wert festlegen, den Sie in den Spalteneinstellungen festlegen müssen. Dies ist jedoch eine String-Variable, kein Boolescher Wert. Wie in meinem OP angegeben, war die Schleife selbst korrekt, der Abschussmechanismus jedoch nicht. Siehe meine eigene Antwort unten. – mtholen

Verwandte Themen