Autor
|
Thema: VB.NET 2010: Datagridview und Scrollbar (4849 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 28. Sep. 2010 14:57 <-- editieren / zitieren --> Unities abgeben:
Ich bins schon wieder, ist schon fast peinlich... Ich habe in meiner Form mehrere 4 DataGridViews, verteilt 4 Tabs eines Tabcontrols. Grundsätzlich bin ich voll begeistert von DataGridviews mit ihren vielen Möglichkeiten, auch wenn die anfangs schwer in den Griff zu kriegen sind. Aber jetzt hab ich mal wieder seltsamen Effekte: - 3 der 4 DGVs haben vertikale Scrollbars, 2 davon auch horizontale.
- Alle DGVs werden vor dem Befüllen mit .Rows.Clear() geleert.
- Nach dem ersten Befüllen sind die Scrollbars von DGV1 und DGV2 ok, der Scrollbar von DGV4 hat keinen Schiebebalken, obwohl die DGV4 mehr Zeilen hat, als in den sichtbaren Bereich passen. Scrollen lässt sich hier nur per Tastatur. (DGV3 ist hier nicht betroffen, da sind zu wenig Daten drin)
- Wenn die DGVs zur Laufzeit neu befüllt werden, dann hat nur noch die DGV einen Schiebebalken, die zu diesem Zeitpunkt oben ist (ausgewählter Tab),also sichtbar. Anderen DGVs haben keine Schiebebalken mehr in der Scrollbar, bzw. die Scrollbar ist dort vorhanden, aber disabled.
- Der Schiebebalken in der sichtbaren DGV entspricht nicht dem tatsächlichen Inhalt, mit dem lässt sich nur ein Teil der DGV durchscrollen.
- auch wenn eine DGV unsichbar und anschließend wieder sichtbar gemacht wird, sind die Schiebebalken verschwunden.
- Das gleiche Problem haben auch die waagerechten Scrollbars!
Hat vielleicht jemand ne Idee, woran sowas liegen könnte? [EDIT] Hier kommt ein Workaround: Bei jedem Betreten der Tab bzw. Wechsel der Eigenschaft visible des DGVs wird die Eigenschaft Scrollbars auf none und dann gleich wieder auf both oder vertical gesetzt, damit wird die Scrollbar jedesmal wieder neu und richtig aufgebaut: Code: Private Sub dgvRFData_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgvRFData.VisibleChanged If dgvRFData.Visible Then dgvRFData.ScrollBars = ScrollBars.None dgvRFData.ScrollBars = ScrollBars.Vertical End If End Sub Private Sub tpRFData_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles tpRFData.Enter dgvRFData.ScrollBars = ScrollBars.None dgvRFData.ScrollBars = ScrollBars.Vertical End Sub
Nicht schön, aber bisher meine einzige funktionierende Lösung. Eine richtige Lösung wäre mir natürlich lieber.[/EDIT] ------------------ Klauswww.al-ko.com | mein Gästebuch | privat... | Nasenheim [Diese Nachricht wurde von KMassler am 28. Sep. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. FEM Simulant / Konstrukteur / SolidWorks
Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 07. Okt. 2010 08:08 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Hi, Klaus! Wenn das DGV-Objekt die Methode REFRESH hat, könntest Du es damit versuchen. (Habs nicht ausprobiert) ... ich habe auch bei einem Programm das genau gleiche Problem! Und nur bei EINEM Programm! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 04. Apr. 2011 15:31 <-- editieren / zitieren --> Unities abgeben:
|
GDawg Ehrenmitglied V.I.P. h.c. FEM Simulant / Konstrukteur / SolidWorks
Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 04. Apr. 2011 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 05. Apr. 2011 08:26 <-- editieren / zitieren --> Unities abgeben:
|
GDawg Ehrenmitglied V.I.P. h.c. FEM Simulant / Konstrukteur / SolidWorks
Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 05. Apr. 2011 08:41 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Den Backgroundworker kann eben in einem anderen Thread das Formular aktualisieren. Der macht genau solche Sachen alles etwas schneller! Z.B. kann ich währen dem Hauptprozess das Formular anpassen (Auszug aus Sub): Code:
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged Try Select Case report_this Case "DataGrid" Dim new_fs_info_arr() As String = Split(e.UserState, ",") If new_fs_info_arr.Count > 5 Then DataGrid.Rows.Add(False, DirectoryToDisplay, new_fs_info_arr(1), new_fs_info_arr(2), new_fs_info_arr(3), new_fs_info_arr(4), new_fs_info_arr(5)) End If Case "DirTotalSize" Me.Directory_Size.HeaderText = e.UserState End Select Catch ex As Exception MsgBox(ex.StackTrace) MsgBox(ex.Message) End Try End Sub
DataGrid.Rows.Add() wird im "Hintergrund" gemacht. Verzögert also den Hauptprozess (BackgroundWorker1_DoWork) nicht. Ich aktualisiere meine Formulare fast nur noch so. Wenn Du etwas geschickt bist, kannst Du so auch Deine Prozesse parallelisieren. Arbeite Dich mal in den Backgroundworker hinein! Es lohnt sich!
------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 05. Apr. 2011 08:48 <-- editieren / zitieren --> Unities abgeben:
Muss ich mir mal anschaun. In meinem diesem Fall wäre das im Hintergrund akualisieren wohl eher ungeschickt, da die Daten erst vollständig geladen sein müssen, bevor der Anwender irgendwas tun darf...der Zeitgewinn bringt mir also nix. Aber für manch andere Fälle wäre das sicher hilfreich, ich werde es mir mal zu Gemüte führen, danke für den Tipp. ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. FEM Simulant / Konstrukteur / SolidWorks
Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 05. Apr. 2011 08:53 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 05. Apr. 2011 09:29 <-- editieren / zitieren --> Unities abgeben:
|