DataGridView Spalten ausblenden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von steel75.

    DataGridView Spalten ausblenden

    Hallo zusammen,
    ich habe einen sehr merkwürdigen Fehler. Ich lade eine Stamm Tabelle in ein DataGridView und blende nur eine Spalte aus.



    direkt in der Zeile Visible knallts mit der folgenden Meldung.



    Nur die Zuweisung an die DataSource oberhalb funktioniert. Hier das Datatable



    Kommentiert am die Visible Zeile aus, wird das ganze DGV mit allen Spalten dargestellt. Noch merkwürdiger ist das in der selben Anwendung andere
    Stamm Tabellen ohne Probleme die Spalte ausblenden, da knallt es nicht. Auch das sind ganz normale Stammtabellen, da ist nicht mal ein INNER JOIN drin.

    Ich hab diesen Fehler noch nie gehabt, hat das schon mal jemand gehabt und weiß woran das liegt, z.B. Einstellungen bei DGV?

    Dank euch schon mal!
    VG steel

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    @steel75 Verwende bitte gefälligst die Dateianhangfunktionalität des Forums:
    Erweiterte Antwort => Dateianhänge => Hochladen.
    Falls 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!
    Direkt nach Bindung an die DataSource weiß das DGV noch nichts von den sich daraus ergebenden Columns. Daher ist dem DGV nicht bekannt, dass es eine Column namens mitarbeiterstatus_ID gibt. Du kannst den bei mir beliebten Delay-Workaround hernehmen. Oder Du arbeitest sauberer, indem Du nicht das DGV an die … OMG 8| Du verwendest ja ein DataSet! Und das etwa ohne passende BindingSources?!? :cursing: Na, dann wundert mich nix mehr.
    Das DGV sollte an eine BindingSource gebunden werden, die als DataSource bereits zur Designzeit die entsprechende DataTable hat. Dann kann man nämlich bereits im Designer das DGV gestalten und festlegen, wie die Spalten aussehen sollen. Und dann werden die DataSet-Daten geladen und man muss gar nix mehr machen, weil alles andere automatisch passiert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    steel75 schrieb:

    habs jetzt aber mal eingebaut
    Was genau? Prüfe auch mal direkt vor der entsprechenden Zeile, wieviele Columns das DGV hat.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    also direkte Zeile über visible hat das DGV diese Daten drin.

    Kommentier ich visible aus, wird das DGV ganz normal gezeichnet.

    es hilft aber auch kein DGV Refresh vor dem visible, es ist als würde die Spalte nicht mehr existieren.

    Nur ein anderer Dialog, hat exakt den selben Code drin, 100% das selbe und der läuft ohne Probleme.
    Bilder
    • DGV_DataSource.jpg

      42,7 kB, 574×298, 90 mal angesehen
    VG steel
    Eh … nein. Ich meine in der CODEzeile über der Fehlerproduzierenden sollst Du prüfen, wieviele Columns (Spalten) das DGV hat, also dort, wo Du in Post#1 den Kommentar Spalten ausblenden stehen hast.
    Von Refresh hat keiner was gesagt. Ich hab was vom DelayWokaround gesagt. Das war ein Link und auf der Zielseite gibt es Code mit den Schlüsselwörtern Async/Await.
    Die Sache aber bleibt trotz ReadOnly DGV: Das Design wird im Designer gemacht, nicht im Code.
    Und Deine Bilder in Post#1 sind immer noch nur über Directupload erhältlich. Bilder solltest Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten. Nicht wenige (Power)User hier klicken ungern auf ImageHosterLinks und stellen stattdessen die Hilfe hier im Thread ein bzw. fangen gar nicht erst mit Hilfe an. Deine Entscheidung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Habs jetzt geändert, ist natürlich jetzt aus dem Zusammenhang gerissen,

    Eh … nein. Ich meine in der CODEzeile über der Fehlerproduzierenden
    sollst Du prüfen, wieviele Columns (Spalten) das DGV hat, also dort, wo
    Du in Post#1 den Kommentar Spalten ausblenden stehen hast.


    Aber das ist genau der Inhalt dieser Zeile und das sind alle Spalten die es gibt (s. Bild vorheriger Post). Andere gibt es nicht.
    VG steel

    steel75 schrieb:

    ist natürlich jetzt aus dem Zusammenhang gerissen
    Ja gut, dafür gibt es ja auch die Bild-im-Text-platzieren-Funktion:

    Ich korrigier das mal …

    Schreib doch mal an der DataSource-Stelle folgendes:

    VB.NET-Quellcode

    1. dgv_EmployeeStatus.DataSource = DBDataSet.Tables("personenstamm_mitarbeiterstatus") 'hast Du schon
    2. MessageBox.Show(dgv_EmployeeStatus.Columns.Count.ToString) 'neu
    3. dgv_EmployeeStatus.Columns("mitarbeiterstatus_ID").Visible = False 'hast Du schon


    Was kommt dabei raus?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für abändern :thumbup:

    Habs grad mal getestet bei

    MessageBox.Show(dgv_EmployeeStatus.Columns.Count.ToString) kommt 0 raus
    bei
    MessageBox.Show(DBDataset.Tables("personenstamm_mitarbeiterstatus").Columns.Count) kommt 5 raus

    Hier wird was nicht übergeben, im Dataset ist alles vorhanden, auch DataTable, aber gebunden wird es nicht, nur warum nicht? Ich spreche DGV.DataSource an = DataTable aus dem Dataset, das muss eigentlich funktionieren.

    ich glaub die Form ist kaputt, ich hab deine Zeile MessageBox.Show(dgv_EmployeeStatus.Columns.Count.ToString) bei einer anderen Form eingefügt, die exakt den selben DGV Code hat eingefügt, wie diese hier die nicht geht. Dort kommt sofort 5 raus.
    Und auch dort wird die PK Spalte ausgeblendet.



    Meine Annahme das die Form defekt ist, war richtig. Ich hab die bestehende komplett aus dem Projekt entfernt und gelöscht und neu angelegt
    und siehe da es funktioniert wieder ohne Probleme.

    @VaporiZed danke für die Hilfe

    Beiträge zusammengefügt. ~Thunderbolt
    VG steel

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()