DataGridView Probleme, nonvisible Zeilen sind immer noch sichtbar und das DataGridView leer ist obwohl er eine DataSource

Ich habe mehrere Probleme mit Zeilen in einer DataGridView.

Hintergrund-Informationen: Die DataGridView (DataGridViewCalib) ist in einem TabPage einer TabControl einige Spalten des DataGridView automatisch DataGridViewCheckBoxColumn als DataSource haben einige Spalten, die Boolean. Dies ist eine Windows-Form geschrieben VB.Net mit Visual Studio 2008. Der Benutzer lädt ein Eingabe-Daten-Datei.

Die Probleme:

1) Bei der ersten Ankunft in der TabPage, ShowDataGridViewCalib (code unten) aufgerufen wird. Alle Zeilen werden dann angezeigt in der DataGridView trotz dem code sagen, dass einige Zeilen nicht sichtbar sein soll. Haltepunkte in den code zeigen, dass der code ankommen, an der Rows.Visible = False Veranstaltungen.
Trotz aller Zeilen beeing gezeigt, dass eine Uhr in der debugger zeigt, dass:

DataGridViewCalib.DisplayedColumnCount(True)=0
DataGridViewCalib.DisplayedColumnCount(False=0)
DataGridViewCalib.DisplayedRowCount(True)=0 
DataGridViewCalib.DisplayedRowCount(False)=0

Columns.Visible=False funktioniert wie erwartet.

Beim ausführen der Unterroutine ShowDataGridViewCalib ein zweites mal, durch die Durchsetzung von checkbox CbUniform, die Reduzierung der Anzahl der Zeilen funktioniert wie es sollte, und die DataGridViewCalib.Displayed...Count korrekt ist.

Was bewirkt, dass die ganze DataTable gezeigt werden das erste mal?

2) der Benutzer kann Die Last einer anderen Eingabe-Daten-Datei. Wenn eine zweite Eingabe-Datei geladen und ShowDataGridViewCalib ausgeführt wird, eine andere seltsame Sache auftreten. DataGridViewCalib.DataSource = {System.Data.DataTable} und diese DataTable hat die gleichen Eigenschaften wie dtCatchCalib,
aber

DataGridViewCalib.Columns.Count = 0 
DataGridViewCalib.Rows.Count =  0

ist und nichts angezeigt wird in der DataGridView.
Vor dem zweiten Eingabe-Datei geladen wird, werden die meisten Daten gelöscht, einschließlich DataGridViewCalib.Columns.Clear() und dtCatchCalib.Clear(). Vor allem für das zweite problem ich gehe davon aus, dass der Fehler könnte irgendwo außerhalb der ShowDataGridViewCalib, aber ich wäre sehr froh für Hinweise darauf, was bewirkt, dass die DataGridView eine DataSource aber noch keine Zeilen und Spalten.

Code:

    Private Sub ShowDataGridViewCalib()
    '[...]
                Dim kolwidth As Integer = 77
                DataGridViewCalib.DataSource = dtCatchCalib
                DataGridViewCalib.Refresh()
                Dim kol As DataGridViewColumn
                For Each kol In DataGridViewCalib.Columns
                    kol.SortMode = DataGridViewColumnSortMode.NotSortable
                    If CbUniform.Checked = False Then
                        kol.Visible = True
                        kol.Width = kolwidth
                        If kol.Name = "CatchmentID" Then
                            kol.ReadOnly = True
                        ElseIf kol.Name = "parc0" Then
                            kol.HeaderText = "c0"
                        ElseIf kol.Name = "statr" Then
                            kol.Visible = False
                            kol.ReadOnly = True
                            kol.HeaderText = "r"
                        End If
                    Else
                        If kol.Name = "IncludeObs" Then
                            kol.Width = kolwidth
                        ElseIf kol.Name = "CatchmentID" Then
                            kol.ReadOnly = True
                            kol.Width = kolwidth
                        Else
                            kol.Visible = False
                        End If
                    End If
                Next

                'Dim rad As DataGridViewRow
                'Dim dum As Integer
                'dum = 0
                'For Each rad In DataGridViewCalib.Rows
                '    dum += 1                                        ' # rows in dtCatchCalib is = # subcatchments
                '    DataGridViewCalib.CurrentCell = Nothing         ' Unselect the current cell, needed to be able to set the row invisible
                '    rad.Visible = False                             ' TEST
                '    If ObsLst(dum) = True Then                      ' ObsLst have its first value at index 1
                '        rad.Visible = True
                '    Else
                '        DataGridViewCalib.CurrentCell = Nothing     ' Unselect the current cell, needed to be able to set the row invisible
                '        rad.Visible = False
                '    End If
                'Next

                For i = 0 To dtCatchCalib.Rows.Count - 1
                    DataGridViewCalib.CurrentCell = Nothing
                    DataGridViewCalib.Rows(i).Visible = False
                    If ObsLst(i+1) = True Then                      ' ObsLst have its first value at index 1
                        DataGridViewCalib.Rows(i).Visible = True
                    Else
                        DataGridViewCalib.CurrentCell = Nothing
                        DataGridViewCalib.Rows(i).Visible = False
                    End If

                Next


'[...]
    End Sub

Gibt es zwei alternative Wege im Umgang mit den Zeilen in den code. Der erste Versuch (kommentierte entfernt hier) ist wohl der "netteste".

Dies ist das erste mal, dass ich post mit einer Frage an ein Programmier forum. Bitte Fragen Sie mich wieder, wenn ich nicht Ausdrücken wollte mich eindeutig genug.

InformationsquelleAutor The Nile | 2009-07-30
Schreibe einen Kommentar