none
DataGridView Bug Invisible Column wird Visible

    Frage

  • Hallo zusammen, wir haben eine Windows Anwendung mit .NET 3 entwickelt. Unter anderem gibt es mehrere DataGridViews, bei denen erste Spalte im Designer Modus auf Invisible gestellt wird. Bis jetzt hat alles super funktioniert. Zur Laufzeit wird die erste Spalte nicht sichtbar. Nun müssten wir auf .NET Version 4.5.2 umstellen. Jetzt werden die ersten unsichtbaren Spalten nach dem Lesen der Daten aus der Datenbank eingeblendet und das bei vielen Grids. Hat jemand eine Idee woran das liegen könnte bzw. wie man das ändert ohne jeden Grid anzufassen und die unsichtbare Spalte in eine andere Position verschieben? 
    Samstag, 13. Januar 2018 16:44

Alle Antworten

  • Hi Marina,
    eine Eigenschaft Invisible gibt es beim DataGridView nicht. Es gibt eine Eigenschaft Visible=False für die Unsichtbarkeit. Diese Zuweisung steht aber im Designer Code, wenn der Designer genutzt wurde. Und da ändert sich beim Übergang vom FrameWork 3 zum Framework 4.5.2 nichts.

    Schreib mal etwas genauer, was Du meinst und, falls Du den designer genutzt hast, warum die Zuweisung verschwunden ist.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Samstag, 13. Januar 2018 16:59
  • Sorry, habe mich nicht exakt ausgedruckt. Die Eigenschaft "Visible" der ersten Spalte ist "false". Es gibt noch weitere unsichtbaren Spalten. Diese werden nicht eingeblendet, nur die erste. Nach der Umstellung ist im Entwurfsmodus auch nichts geändert. Die Spalte wird dann in laufender Anwendung sichtbar. Ich darf leider keine Screenshots einfügen, sonst würde ich das tun.

    Montag, 15. Januar 2018 06:37
  • Hi Marina,
    um die Ursache des Problems zu ergründen, kann man ein Trace einbauen, mit dem alle Spalten und deren Eigenschaft Visible protokolliert werden. Damit kann man erst einmal sicherstellen, ob dem wirklich so ist, dass die erste Spalte angezeigt wird, obwohl Visible=False ist.

    Ich vermute dagegen, dass entweder Visible auf True steht oder durch irgendwelche Programmabschnitte eine weitere sichtbare Spalte hinzugefügt wird, die dann parallel zu der unsichtbaren Spalte in der Auflistung vorhanden ist und zufällig an erster Stelle sichtbar ist. Das kann auch im Ergebnis einer Bindung und bei AutoGenerateColumns=True sein.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 16. Januar 2018 07:31
  • AutoGenerateColumns beim Grid ist false. Die Spalte wird nicht neu hinzugefügt, sondern die Eigenschaft Visible wird automatisch auf true geändert (aber nicht durch mein Code) in dem Moment als die Daten aus der Datenbank eingelesen werden.
    Dienstag, 16. Januar 2018 08:19
  • Hi Marina,
    die Eigenschaft kann nicht von sich aus auf true gesetzt werden. Da muss ein Befehl ausgeführt werden. Und diesen Befehl muss man ermitteln, um zu erkennen, was dafür die Ursache ist.

    Das Laden der Daten aus der Datenbank hat überhaupt nicht mit den DataGridView zu tun. Üblicherweise kennt der DataLayer das DataGridView überhaupt nicht und kann nicht darauf zugreifen. Mit dem Laden der Daten wird ein Datenpuffer gefüllt. Auch dieser Vorgang kennt das DataGridView nicht. Erst mit der Bindung des Datenpuffers an das DataGridView wird eine Verbindung zwischen Daten und DataGridView hergestellt. Mir ist noch nicht vorgekommen, dass damit andere Eigenschaften des DataGridView bzw. deren eingebetteten Objekte verändert werden. Wenn das wirklich so ist, dann stelle mal eine Demo zusammen, mit der man das nachweisen kann, und melde einen Fehler an Microsoft.

    Neben dem einfachen (Neu)-Binden gibt es natürlich auch andere Szenarien. So kann über ein "Zwischenobjekt" gebunden werden (z.B. BindingSource). Auch können gebundene Collections nach Löschen des Inhalts neu gefüllt werden. Außerdem kann das Verhalten der Spalten durch Code beeinflusst werden, um das Design einer Spalte in Abhängigkeit von anderen Parametern zu verändern. Das müsstest Du mal prüfen.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 16. Januar 2018 08:48