Datagridview zeigt ausgeblendete Spalten an
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 38 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.
-
-
-
@PSJ
Mit Me.Close arbeite ich ja, das "verbirgt" aber nur die Form und lässt die Steuerelemente so, wie ich sie "verlassen" habe.
@WhitePage
Genau, im Entwurfsmodus und beim ersten öffnen passt es.
Und zur zweiten Frage, ich habe eine sehr umfangreiche Anwendung in Access, welche ich nun in VB (mit MySQL Backend) umsetzen will. Hier kommt es wirklich oft vor, das man Formulare schließt und wieder öffnet. Vielleicht nicht direkt hintereinander, zwischendurch macht man noch andere Sachen in anderen Formularen, aber letztendlich ist es so. -
Die Frage war nicht, warum der User das gleiche Formular öffnet, sondern warum es dasselbe OBJEKT sein soll? Warum erzeugst du nicht jedes Mal ein neues Objekt der Formularklasse, wenn die Daten vom ersten Öffnen nicht übernommen werden sollen?
Für mich hat es nur einen Sinn, das Objekt nicht zu zerstören, wenn die Daten für später gebraucht werden.
Ansonsten:
EDIT: Mal eine blöde Frage, erzeugst du überhaupt ein Objekt oder verwendest du die Klasse? Das würde natürlich das Problem dann erklären.
-
Dann habe ich dich falsch verstanden und werde deinen Vorschlag umsetzen.
Ich war der Meinung, das Me.Hide die Version war, um die Form nicht zu "zerstören" und Me. Close eigentlich das richtige ist. Vielleicht hält der TableAdapter die Form auch im Hintergrund am Leben.
Zu deinem Edit. Wenn ich dich richtig verstehe verwende ich bisher die Klasse. Ich rufe also direkt die Form auf und nicht wie bei deinem Vorschlag als neues Objekt. Scheinbar ist VB doch eine größere Umstellung für mich als gedacht.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „AndPod“ ()
-
AndPod schrieb:
Wenn ich dich richtig verstehe verwende ich bisher die Klasse. Ich rufe also direkt die Form auf und nicht wie bei deinem Vorschlag als neues Objekt.
-
Ist zumindest interessant, öffne ich mit. Show das Formular wird es beim schließen auch ordentlich entladen. Bei .ShowDialog nicht. Generell verhält sich das geöffnete Formular gegenteilig von dem was @RodFromGermany geschrieben hat, da werde ich aber wohl in dem Beitrag selber schreiben.
-
-
Bisher habe ich sie mit .ShowDialog(Me) geöffnet. Das hatte zur Folge, dass das Formular beim schließen nicht entladen wurde und dadurch irgendwie mein ursprünglich beschriebenes Problem verursacht wurde. Öffne ich es mit .Show(Me) klappt alles soweit wie gewünscht, mit dem Nachteil das ich die dahinter liegende Form anklicken kann. Und das will ich eigentlich auch nicht. Ein Teufelskreis
-
-
Ich kann dir gerade nicht folgen. Mehr als frmRegion.Show(Me) bzw frmRegion.ShowDialog(Me) habe ich nicht um die Form zu öffnen. Der oben vorgeschlagene Code von dir mit Using bewirkt zwar, das .ShowDialog(Me) so funktioniert wie ich es will und die Form wirklich beim schließen entläd, allerdings bewirkt es wohl auch, das eine weitere Form, welche ich in der frmRegion öffne, nicht mehr auf diese zugreifen kann.
Ich kann ja nochmal zusammen fassen: in frmStart öffne ich die Form frmRegion. Diese ist mittels TableAdapter an eine Datenbank gebunden. Nutze ich zum öffnen frmRegion.ShowDialog(Me) wird die Form beim schließen nicht entladen, die Steuerelemente sind also beim erneuten öffnen noch sie wie ich sie beim schließen verlassen habe und nicht wie beim ersten öffnen z.B. gesperrt. Dadurch kommt es wohl auch zu meinem ursprünglichen Problem. Erzeuge ich mittels Using ein neues Objekt und öffne es klappt das erneute öffnen auch problemlos. Allerdings kann ich dann wohl nicht von der Form frmRegionAnschrift, welche ich in frmRegion öffne, auf diese zugreifen. Öffne ich frmRegion mit .Show(me) klappt alles wie gewünscht, ich kann dann allerdings auf die dahinterliegende Form klicken. Und das will ich auch verhindern. Hoffe ich habe das nochmal richtig und halbwegs verständlich zusammen gefasst. -
Hallo AndPod,
ich kenne das Phänomen der nicht unsichtbaren (ID-)Spalten und habe bei meinen Projekten meist eine Region mit solchem Code, nachdem ich das Problem und die Lösung in dem u.g. Posting gefunden hatte (hier für ein "BlaDGV"):
VB.NET-Quellcode
- ' VS-Bug ausbügeln: Das Ausblenden von Columns geht nicht (immer) zur Designzeit, erst wenn die Datenbindung fertig ist
- ' (http://forums.codeguru.com/showthread.php?372142-Hiding-a-DataGridView-column)
- Private Sub BlaDGV_DataBindingComplete(sender As Object, e As DataGridViewBindingCompleteEventArgs) Handles BlaDGV.DataBindingComplete
- BlaDGV.Columns("BlaDGVIDColumn").Visible = False
- End Sub
Ist nur ein Workaround, aber führt zum Ziel. Mache ich für die DGV's, bei denen das Problem auftritt, meist sind das nur sehr wenige. Hope that helps. -
Ich glaube, du hast immer noch das Problem nicht verstanden.
Mit frmRegion als Klasse kannst du zwar eine Form öffnet, allerdings nicht objektorientiert, weil im Hintergrund zwar ein Objekt erzeugt wird, es aber Probleme auftreten, wenn man ein zweites Mal öffnen will.
Du musst kein Using nutzen. Dann deklariere halt das Objekt der Form einfach so:
Jetzt hast du ein Objekt und die Probleme treten nicht mehr auf. -
@WhitePage
Ich denke ich habe es soweit schon verstanden. Wenn ich eine Form mehrmals parallel öffnen will muss ich sie entsprechend als neues Objekt deklarieren. Habe ja auch oben geschrieben, das dieser Weg durchaus funktioniert. Ich öffne die Form aber nicht mehrmals parallel, sondern öffnen -> schließen -> öffnen -> schließen. Mit .Show funktioniert das auch wie gewünscht, ich kann allerdings die dahinter liegende Form anklicken was ich nicht will. Mit .ShowDialog kann ich zwar wie gewünscht nicht mehr die dahinter liegende Form anklicken, sie entläd allerdings nicht beim schließen sondern behält ihren letzten Zustand.
Wenn ich jetzt Dim statt Using nehme funktioniert auch der Zugriff. Danke dafür.
Trotzdem interessiert mich, ob das beschriebene Verhalten normal ist, das eine mit ShowDialog geöffnete Form (ohne sie als neues Objekt zu deklarieren) beim schließen nicht entladen wird, eine mit. Show geöffnete allerdings schon. -
AndPod schrieb:
Wenn ich eine Form mehrmals parallel öffnen will muss ich sie entsprechend als neues Objekt deklarieren
Nein nein, du musst IMMER ein neues Objekt deklarieren. VB ermöglicht es dir, eine Form ohne Instanziierung zu öffnen, allerdings ist es eine ganz schlechte Art zu programmieren, weil du immer ein Objekt in einer objektorientierten Programmierung brauchst (wie der Name schon sagt).
AndPod schrieb:
das eine mit ShowDialog geöffnete Form (ohne sie als neues Objekt zu deklarieren)
Deswegen kann man die Frage so nicht stellen, ob es ein Normalverhalten ist. Weil das, was du machst, ist schon kein Normalverhalten.
-
AndPod schrieb:
ob das beschriebene Verhalten normal ist, das eine mit ShowDialog geöffnete Form (ohne sie als neues Objekt zu deklarieren) beim schließen nicht entladen wird, eine mit. Show geöffnete allerdings schon.
Vmtl. geht MS bei mit ShowDialog geöffneten Forms davon aus, dass da noch iwas von abgerufen werden soll - denn .ShowDialog() ist ja für Dialoge gedacht, also womit ein User was eingibt. -
Ich habe das ganze jetzt als erledigt markiert. Wenn es von MS so gewollt ist, dann war .ShowDialog die falsche Wahl bzw. muss meine Form so öffnen wie von @WhitePage beschrieben (widerspricht sich das dann nicht der Vorstellung von MS, die @ErfinderDesRades vermutet?). Danke für die Hilfe und Hinweise.
-
AndPod schrieb:
dann war .ShowDialog die falsche WahFalls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
AndPod schrieb:
Wenn es von MS so gewollt ist, dann war .ShowDialog die falsche Wah
Aber wenn du sagst, es war die falsche Wahl - ich hab wohl nicht richtig verstanden, was du erreichen willst.
-
Ähnliche Themen
-
7 Benutzer haben hier geschrieben
- AndPod (16)
- WhitePage (10)
- RodFromGermany (4)
- PSJ (4)
- VB1963 (2)
- ErfinderDesRades (2)
- DahProgrammah (1)