Datatable mit Daten versorgen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    Datatable mit Daten versorgen

    Hallo,

    habe mir eine Datatable angelegt und so stelle ich die Spalten her:

    VB.NET-Quellcode

    1. Private Sub Berechnung_Dachkonstruktionen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. 'TODO: Generieren der dt_AltDach Spalten
    3. Dim column As DataColumn
    4. 'Ad_B_Id
    5. column = New DataColumn
    6. column.DataType = System.Type.GetType("System.Int32")
    7. column.ColumnName = "Ad_Bid"
    8. dt_AltDachaufbau.Columns.Add(column)
    9. 'ad_Bezeichnung
    10. column = New DataColumn
    11. column.DataType = System.Type.GetType("System.String")
    12. column.ColumnName = "Ad_Bezeichnung"
    13. dt_AltDachaufbau.Columns.Add(column)
    14. End Sub


    Jedoch wird das Form geschlossen und danach erneut aufgemacht, kommt die Fehlermeldung, dass diese Spalten schon vorhanden sind.
    Das ist mir zwar klar, aber andererseits- wie kann ich dann das umgehen, dass er erneut versucht die Spalten zu erstellen ?

    lris


    EDIT

    habe das nun über try gelöst, wenn vorhanden - keine fehlermeldung...
    ist bestimmt eine perverse Lösung... aber funktioniert

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „lris08“ ()

    Hallo Iris,
    verwende ein Dataset...
    rechte Maustaste aufs Projekt>hinzufügen> Dataset auswählen und benamen.
    Doppelklick aufs Dataset und nun Tabelle hinzufügen, Spalten eintragen mit Datentyp versehen (Viel im Kontextmenü rumackern).
    Nun Ansicht> Datenquellen. Dort findest du deine Tabelle wieder. Im Designer die Tabelle auf die Form ziehen. Ein Datagridview wird erzeugt und Dataset sowie ein Bindingnavigator in die Komponenten gelegt. Den Navigator kannst du i.d.R. löschen.
    Nun kannst du problemlos im DGV Daten eintragen, löschen usw.
    Zum Speichern und Laden verwende (erstma ohne Datenbank) Me.DeinDataset.WriteXML(Pfad) und ...ReadXML...
    "Erfinder des Rades" hat dazu etliche Tuts, Links und Tipps gepostet.

    Fiel Fergnügen und vrohes Vest

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Hallo :)

    Danke erstmal...

    Ich habe das heute auch schon mal ausprobiert... das finktioniert erst mal super... bis ich an den Punkt komme, wo ich daten manuell hinzufügen möchte... also nicht per Handeingabe sondern als Drag&Drop...

    Da kommt dann die Fehlermeldung: "Zeilen können nicht automatisch zur Zeilenauflistung der DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist."


    So versuche ich dann daten in dieses Datagridview bzw. in diese Table zu bringen... das mag er aber nicht...

    VB.NET-Quellcode

    1. Private Sub treeView1_ItemDrag(sender As Object, e As ItemDragEventArgs) Handles TreeView1.ItemDrag
    2. ' Zu verschiebenden Knoten wählen:
    3. Dim sourceNode As TreeNode = DirectCast(e.Item, TreeNode)
    4. ' DragDrop beginnen:
    5. DoDragDrop(sourceNode, DragDropEffects.Move Or DragDropEffects.Copy)
    6. End Sub
    7. Private Sub Hdt_AltDachDataGridView_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Hdt_AltDachDataGridView.DragOver
    8. If e.Data.GetDataPresent(GetType(TreeNode)) Then
    9. If (e.KeyState And 8) = 8 Then
    10. e.Effect = DragDropEffects.Copy
    11. Else
    12. e.Effect = DragDropEffects.Move ' nur linke Maustaste
    13. End If
    14. Else
    15. e.Effect = DragDropEffects.None
    16. End If
    17. End Sub
    18. Private Sub Hdt_AltDachDataGridView_Funtkion(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Hdt_AltDachDataGridView.DragDrop
    19. Hdt_AltDachDataGridView.Rows.Add(TreeView1.SelectedNode.Tag, "")
    20. End Sub


    Die Lösung mir dem Designer gefällt mir am besten, aber wenn ichz keine Daten hinzufügen kann - nervt halt.

    Und was auch nervt, wenn ich über denDesigner ein Datagridview formatiere, also Spalte ausblende...
    Wenn ich das Form schließe und erneut öffne, werden auchdie ausgeblendeten Spalten wieder angezeigt.
    Sry, mit DragDrops bin ich jetzt nich so der Fachmann. Ich könnt mir aber vorstellen, dass dein SelectedNode erst in eine Datarow, passend zu deiner Tabelle umgewandelt werden muß.
    Also vielleicht dein selectedNode an eine Variable übergeben, und eine neue DeinDataset.DeineTabelle.NewbimmelbammelDatarow erzeugen (Siehst du im Intellisense).
    Die Felder dieser Datarow eizeln mit den Daten(Subitems) aus deinem selectedNode befüllen und dann Datarow adden. Aber zum Dataset adden! nicht zum Gridview.

    versuchs ma ;)

    Und was auch nervt, wenn ich über denDesigner ein Datagridview formatiere, also Spalte ausblende...
    Wenn ich das Form schließe und erneut öffne, werden auchdie ausgeblendeten Spalten wieder angezeigt.
    Du kannst beim bearbeiten der Spalten (klitzekleiner Pfeil am DGV) auch Spalten entfernen (oder auch wieder hinzufügen). das sollte funzen.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Ok... also ich bin sowas von genervt, dass ich jetzt vor lauter Wut meine Tastatur gegen die Mauer geballert habe.
    Jetzt mußte ich eine andere hinhängen sonst kann ich ja nicht schreiben..

    Fahre jetzt noch schnell in den Media Markt und muß mir eine neue kaufen...



    Also lassen wir mal das mit drag&drop weg.

    Wie füge ich dem Datagridview das Datengebunden ist manuell Daten zu ?
    Also nicht händische Eingabe im DGV sondern z.B. so:

    Quellcode

    1. Hdt_AltDachDataGridView.Rows.Add(TreeView1.SelectedNode.Tag, "")


    Das verweigert er aber, weil:

    Quellcode

    1. Zeilen können nicht automatisch zur Zeilenauflistung der DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist.



    Vielleicht fällr Dir oder auch jemand anderes was ein dazu... Aber erstmal danke soweit...
    Ich fahre jetzt erstmal in den MM, die kleine Pause tut mir gut...


    lris

    Vatter schrieb:

    Aber zum Dataset adden! nicht zum Gridview.

    Die Daten werden vom Programm GRUNDSÄTZLICH im:
    Dataset gehalten, hinzugefügt, gelöscht. Das ist einfacher, weil durch die Typisierung die Tabellen- und Spaltennamen im Intellisense angezeigt werden
    Im Bindingsource wird gefiltert und sortiert
    Das DGV dient ausschließlich der Dartsellung und Tastatureingaben (...die du ja nicht mehr machen kannst :D )

    Desterwegen obige Aussage: Datenrow dem dataset adden. Die werden denn sofott im DGV angezeicht, ohne viel Brimbamborium.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    so nun bin ich wieder da... mit meiner neuen Tastatur :)

    jetzt kann i wieder schreiben :) und zwar ordentilich, hoffe nur ich bekomme nicht wieder einen Wurtanfall :D


    Wie meinst du das bitte... dem Dataset hinzufügen. Ich dachte man kann nur einer Tabel was hinzufügen.

    Kannst mir mal sagen wie du das meinst ?

    lris

    EDIT:

    Habs kapiert; Me.ProgrammDatenSet.Hdt_AltDach.Rows.Add(TreeView1.SelectedNode.Tag, "")
    Also ich bin ganz beglückt... vielen dank für deine Hilfe... jetzt funktioniert es fast so wie ich das will !!

    Danke!


    Nur noch eine Frage bitte...


    Mir macht noch die Sortierung schweirigkeiten... Es soll nicht einfach so sortiert werden wie Daten hinzugefügt werden bzw. nach dem Primärschlüssel, sondern möchte ich die von hand vornehmen können... und so solls auch bleiben...

    wie kann ich so was anstellen ??

    Vielleicht eine Idee dazu ??

    lris
    Im DGV die Spaltenköpfe anklicken ist die einfachste Möchlichkeit.
    Sonst schau ma im Objektbraowser oder bei MSDN die Bindingsource-Klasse. Da kannst du glaubsch Sortierungen einstellen.

    Mußt ma suchen, ich muß jetzt nach Weihnachten

    vrohes Vest

    Vatter

    Edit: Schaumahier
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: