DataGridView Formatierung - unverständliche Fehlermeldung

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

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    DataGridView Formatierung - unverständliche Fehlermeldung

    Hi,

    ich habe eine DatagridView mit fünf Spalten. Alle Spalten sind an einen typisierten Dataset gebunden. Das funktioniert auch soweit.

    Jetzt habe ich im typisierten Dataset eine sechste Spalte hinzugefügt.

    Diese Spalte habe ich dann als gebundene Spalte auch in meiner Datagridview hinzugefügt und die Routine zum Befüllen der Spalten entsprechend ergänzt. Im Designer sieht das alles blendend aus.

    Beim ERSTEN Start der Anwendung erhalte ich jedoch die folgende Fehlermeldung:

    Quellcode

    1. Fehler bei der Codegenerierung für die DataSetName-Eigenschaft.
    2. Fehler: 'Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.'


    Überraschenderweise läuft die Anwendung aber danach ohne Probleme. Die neue Spalte wird richtig angezeigt ... und die Fehlermeldung erscheint ab dem nächsten Start auch NICHT mehr.

    Nur ist meine Programm wohl doch nicht ganz so "gesund".

    Jetzt habe ich versucht den Font der neuen Spalte auf "Courier NEW, 10pt" einzustellen. Dazu habe ich den DefaultCellStyle-Font der Spalte geändert. Im Designer geht das problemlos durch.

    Sobald ich die Anwendung aber das erste Mal neu starte, erhalte ich die obige Fehlermeldung wieder. Das Programm läuft zwar, aber der Font ist unverändert.

    Jede andere Änderung, z.B. Änderung der SpaltenÜberschrift bzw. SpaltenBreite, SortMode=Programmatic führt zu genau dem gleichen Fehlermeldung. Diese Änderungen werden allerdings wirksam.

    Ich weiß, das ist viel verlangt ohne meine Coding zu kennen. Aber hat jemand eine Ahnung was ich falsch gemacht haben könnte?

    LG
    Peter

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

    Peter329 schrieb:

    Fehler bei der Codegenerierung für die DataSetName-Eigenschaft.
    Jou.
    Gib der Tabelle einen Namen:

    VB.NET-Quellcode

    1. Me.table = New DataTable()
    2. Me.table.TableName = "TestDaten"
    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!
    Also erst mal vielen Dank für deinen Rat.

    Leider, weiß ich nicht so recht, wie ich das umsetzen soll.

    Ich habe einen typisierten Dataset erstellt: FileListDts.xsd

    In den Eigenschaften sehe ich:

    FileListDts DataSet

    Wenn ich die Tabelle anklicke erhalte ich:

    FileList DataTable

    Ich habe sodann die Tabelle auf die Form gezogen und damit wird eine DataGridView erstellt, die über Databinding mit der Datasource verbunden ist.

    Außerdem habe ich eine Routine erstellt, welche die Datasource befüllt.

    VB.NET-Quellcode

    1. FileListDts.FileList.AddFileListRow(fi.Name,
    2. fi.Name,
    3. fi.Length,
    4. fi.LastWriteTime,
    5. strAttr, <--- diese Spalte habe ich hinzugefügt
    6. fi.FullName)


    Das ist alles. Wo soll ich denn jetzt die Sache mit der Namensvergabe einbauen ?

    Und noch etwas ... mit fünf Spalten hat das ja alles prima geklappt. Auch ohne jede Namensvergabe. Nur als ich nach der vierten Spalte noch eine weitere Spalte eingefügt habe, ist der o.a. Fehler aufgetreten.

    Ich bin nach wie vor ratlos ...
    tja, mein Dank auch an dich ... aber das hab ich schon versucht ... Der Fehler tritt jedoch auf BEVOR die InitializeComponent Routine angesprungen wird.

    Ich glaube auch nicht, dass da eine Anweisung in meinem Programm fehlerhaft ist. Ich habe ja kaum was verändert! Da ist vermutlich irgendwas im Designer verstrubbelt.

    Übrigens, die Fehlermeldung erhalte ich auch, wenn ich die Eigenschaft irgendeiner der anderen Spalten verändere!

    Uff ... wenn ich nur eine Ahnung hätte, wie an dieses Problem ran komme ...

    Peter329 schrieb:

    Der Fehler tritt jedoch auf BEVOR die InitializeComponent Routine angesprungen wird.
    Erstaunlich.
    Dann ist vlt. was im Dataset-Designer-Code kaputt.
    Den kannste komplett löschen, und wenn du dann im Designer an einer Tabelle bischen rumziehst, bewirkt das ein Neu-Generieren des Dataset-Designer-Codes.

    Aber immer feste Backup machen

    Ansonsten kannste auch ein Testprojet zippen und anhängen, was den Fehler reproduziert.
    Guten Tag Peter329

    Hast du uns eventuell ein bisschen Code.

    Also mir würde interessieren wie du den typisierten Dataset in die DGV bringst .. oder ob du zuerst ein Schema speicherst, dass du nachher wieder einbeziehst, und womit du nachher in die DAtasource der DGV gehst.

    Fehler können auf der ganzen Reihe entstehen

    Freundliche Grüsse

    exc-jdbi
    Also so wie ich das jetzt verstehe, wird die Meldung beim Generierung des Anwendung erzeugt. Deshalb greift der Trace der "InitializeComponent" Routine nicht. Und deshalb wird die Sache auch nur EINMALIG angezeigt. Also ... da ist schon irgendwas im Designer verstrubbelt.

    Klar ... löschen und neu erstellen ist dann vielleicht das sicherste Vorgehen. Aber es wäre natürlich schön, wenn man das auch ein bissl kräftesparender hinbekommt.

    Ich hab das Projekt mal angehängt. Einfach in der "dgvFiles" die Breite der Spalte "FileAttr" von 50 auf 55 ändern ... und schon tritt der Fehler auf.
    Dateien
    • IconViewer.zip

      (215,59 kB, 111 mal heruntergeladen, zuletzt: )
    Bei mir taucht kein Fehler auf :(

    Aber in dgvSubdirectories finde ich eine Spalte, die an SubdirectoryAttributes gebunden zu sein vorgibt.
    Ich finde aber im Dataset no such column.

    Ah - das ist wohl ein weiteres Dataset - untypisiert.
    Da ist mir zu mühsam, nach iwelchen Fehlern zu suchen - aber das DGV macht dir ja eh kein Prob.

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

    Erst mal vielen Dank für deine Mühe, das Problem nachzuvollziehen.

    Tja, und weil das bei dir NICHT auftritt, hab ich das gemacht, was jedes HelpDesk als Standardlösung empfiehlt: den Computer neu zu starten. Und siehe da, auch bei mir läuft das Ding jetzt ! Mist ... das hätte ich vorher machen sollen ... aber wer rechnet mit sowas.

    Nun gut, aber wo du jetzt das Projekt schon mal runter geladen hast, könntest du mir vielleicht noch eine Frage beantworten.

    In der dgvSubdirectories, gibt es eine Spalte mit dem Header "V". Der PropertyName ist "SubdirValid" - so wie der Name auch im typisierten Dataset lautet.

    Der "Designer Name" (Entwurf (Name)) lautet aber "SubdirIndicator" ... und das ist unschön, weil ich die Namen im Designer und in der DataSource gern synchron halten möchte. Das klappt auch bei anderen Spalten. Nur bei dieser Spalte klappt es nicht. Wenn ich den Design Namen auf "SubdirValid" ändere erhalte ich die Fehlermeldung:

    Quellcode

    1. Der Name 'SubdirValid' wird bereits von einer anderen Komponente verwendet.


    Und damit scheitert die Änderung der Namensvergabe.

    Ich hab mich dumm und dämlich danach gesucht, wo der Name schon verwendet werden könnte und nix gefunden.

    Any bright ideas?
    Jede DGV-Column ist ein benanntes Objekt, was der DesignerCode als Feld der Form-Klasse anlegt.
    Muss deshalb einen einzigartigen Namen haben. Scheinbar wird der von dir favorisierte Name bereits von einer DGVColumn verwendet, die im anneren DGV verbaut ist.
    Tatsächlich ist die Benamug dieser Columns meist ziemlich schnurz - auf die Dinger greift man nur sehr selten per Code zu.
    Aber in dgvSubdirectories finde ich eine Spalte, die an SubdirectoryAttributes gebunden zu sein vorgibt.

    Ich finde aber im Dataset no such column.


    Das hab ich wieder mal erst entdeckt, als ich meinen vorangehenden Beitrag schon abgeschickt hatte.

    Also, verstehen tue ich das nicht. Mein typisiertes Dataset enthält die Spalten:

    SubdirValid
    RealSubdirectoryName
    DisplaySubdirectoryName
    SubdirectoryAttributes
    RealPath

    Und das sind doch genau die Spalten, die meine "dgvSubdirectories" enthält.

    Muss deshalb einen einzigartigen Namen haben. Scheinbar wird der von dir favorisierte Name bereits von einer DGVColumn verwendet, die im anneren DGV verbaut ist.


    Also es gibt genau zwei DatagridViews: dgvSubdirectories und dgvFiles

    Wenn ich "SubdirValid" über alle Dokumente suche, erhalte ich in der Form1.Designer.vb

    VB.NET-Quellcode

    1. 'SubdirIndicator
    2. '
    3. Me.SubdirIndicator.DataPropertyName = "SubdirValid"
    4. DataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
    5. Me.SubdirIndicator.DefaultCellStyle = DataGridViewCellStyle4
    6. Me.SubdirIndicator.HeaderText = "V"
    7. Me.SubdirIndicator.Name = "SubdirIndicator"
    8. Me.SubdirIndicator.ReadOnly = True
    9. Me.SubdirIndicator.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
    10. Me.SubdirIndicator.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic
    11. Me.SubdirIndicator.Width = 25
    12. '


    VB.NET-Quellcode

    1. 'SubdirValid
    2. '
    3. Me.SubdirValid.DataPropertyName = "SubdirValid"
    4. Me.SubdirValid.HeaderText = "V"
    5. Me.SubdirValid.Name = "SubdirValid"
    6. Me.SubdirValid.ReadOnly = True
    7. Me.SubdirValid.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic
    8. Me.SubdirValid.Width = 25
    9. '
    10. 'Column2
    11. '
    12. Me.Column2.DataPropertyName = "SubdirValid"
    13. Me.Column2.HeaderText = "V"
    14. Me.Column2.Name = "Column2"
    15. '


    So ganz verstehe ich das nicht ? Und wo kommt denn diese vermaledeite "Column2" her ... Irgendwie kann ich diese Eintragungen nicht mit dem Designer zuordnen.
    na, was ich sage: Da gibts 2 DGVColumns, die denselben DataPropertyName haben.
    Und eine davon konnte diesen Namen auch als CodeName übernehmen.
    Anschließend ist der Codename belegt, und für die 2.Column muss dann iwas anneres gewählt werden - warum nicht "Column2"?

    Iwie scheint dein typDataset anners zu sein als meins. Bei mir gibts:
    RealFileName
    DisplayFileName
    FileSize
    FileLastChangedDate
    FileAttr
    RealObject

    Ah - was du als "typisiertes" Dataset bezeichnest, ist keines. Typisierte Datasets kann man im Dataset-Designer angucken und designen.
    Also so langsam verzweifel ich an dieser Kiste.

    @exc-jdbi

    Tja, dann funktioniert das also bei dir ... aber bei mir bleibt der Fehler beharrlich ... auch nach Neustart des PC. Ich hab ein Bildchen angehängt ...
    Bilder
    • SubdirValid.jpg

      281,95 kB, 1.920×1.080, 100 mal angesehen
    .. mmhhh.... ich arbeite mit Vb.Net 2010 und die Änderung habe ich jetzt direkt im QuellCode des Designer's gemacht. Das kann man sogar in der Zip-Datei nachsehen

    Wahrscheinlich soblad du dann die Werkzeuge des Designer nutzt, bekommt er ein Problem. Anderst kann ich mir das nicht erklären Sorry.

    Aber wie EDR sagte. Auf den Entwurfsnamen wird quasi sehr selten was bezoen. Ich nehm immer den regulären Namen. der Spalte.


    Freundliche Grüsse

    exc-jdbi
    Erst mal Danke für eure Mühe!

    Iwie scheint dein typDataset anners zu sein als meins. Bei mir gibts:


    Ich denke ich habe ZWEI typisierte Datasets:

    SubdirectoryListDts (Fünf Spalten)

    - V (SubdirValid) <--- um diese Spalte geht es
    - RealName (RealSubdirectoryName)
    - Name (DisplaySubdirectoryName)
    - Attr (SubdirectoryAttributes)
    - RealPath (RealPath)

    FileListDts (Sechs Spalten)

    - RealFileName (RealFileName)
    - FileName (DisplayFileName)
    - FileSize (FileSize)
    - Last Changed (FileLastChangedDate)
    - Attr (FileAttr)
    - RealObject (RealObject)

    Es geht jetzt um die "dgvSubdirectories" ... irgendwas ist doch faul mit dem Ding !

    Die Column2 habe ich nicht angelegt ... diese Name werden vom Designer vorgeschlagen ... und ich habe das Gefühl, dass da irgendetwas hängen geblieben ist. Wissentlich habe ich nichts anderes angelegt als das, was ich oben dokumentiert habe.

    Was ist denn da falsch gelaufen ? Und wie kann ich das beheben ?
    Jo - ist verwirrend:


    FileListDts und die SubdirectoryListDts werden vollkommen verschieden angezeigt. Anbei ein Screenshot.

    Wie sollte das denn richtig aussehen ? Und wie kann ich das hinbekommen ?
    Bilder
    • typisierteDatasets.jpg

      168,02 kB, 1.156×1.028, 73 mal angesehen

    Peter329 schrieb:

    Wie sollte das denn richtig aussehen ?
    Verwende genau ein DataSet mit 2 disjunkten DataTables.
    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!