DataGridView Zeilen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von razzzer530i.

    DataGridView Zeilen

    Guten Tag,
    Ich habe folgendes Problem:
    Ich habe ein Projekt mit einem DataGridView, welches mit Daten befüllt wird, und später im Programmcode verarbeitet werden soll.

    Beispielswiese die ColumnTest und die ColumnTest2
    Bei der ersten ist ein ganz normaler Text drin, der dann quasi so ähnlich formatiert werden soll:

    VB.NET-Quellcode

    1. Dim test
    2. If ColumnTest.Text ="" Then
    3. test = " "
    4. Else
    5. test = ColumnTest.Text.PadRight(10, " ")
    6. End If


    Ich muss quasi zum einen jeden Wert aus den Zellen bearbeiten können, bzw, formatieren können und anschließend für jede Zeile eine Loop Funktion haben, welche mir die Zeilen untereinander auflistet:
    LINE1TEST1 TEST2 TEST3


    Der Loop wird dann in eine Datei geschrieben...

    Ich hoffe Ihr habt verstanden, wie ich das meine und wisst wie ich zum einen die einzelnen Zellen/Rows ansprechen und Formatieren kann, und diese auch für jede Zeile individuell im Loop ausgegeben bekomme. Ich sag schonmal VIelen Dank!

    MfG. VBDev
    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    "die einzelnen Zellen/Rows ansprechen "

    For Each row As DataRow in DataGrid1.Rows
    'do stuff
    Next
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Zum einen finde ich bei mir in den Standart Steuerelementen keine Datatable, und zum anderen benötige ich ja ein Steuerelement in das man Daten eingeben kann (Text, Combo, Checkbox) , welchs ich anschließend in eine Datei schreiben kann.
    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    Du musst ein typisiertes Dataset zu deinem hinzufügen und darin deine Datatable kreieren - das ist kein Control...

    DeinProjekt/Hinzufügen/Neues Element.../Daten/Dataset

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

    Dann Frage ich mal anders:
    Gibt es ein Control mit dem das ohne Datenbank geht? Ich benötige im Grunde genommen nur eine Tabellarische Eingabe da die Daten später in einer Textdatei landen. Die Datenbank im Hintergrund, welche die Daten nur "zwischenspeichert" macht dann doch keinen Sinn oder?
    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    Das Dataset ist im Grunde als Datenpuffer anzusehen, wo man ganz easy die Daten füllen kann und die Tabelle an zB. ein DGV über eine Bindingsource bindest. Da hast du alles, was du brauchst...
    Man kann sich auch eine eigene Datenklasse dazu entwerfen und mit dieser die Daten behandeln.

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

    @VBDev du lädst keine Daten in dein Grid, sondern nutzt es, wie z.B. Excel, um dort Dinge rein zu schreiben, korrekt?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Genau so ist es. Ich schreibe dort Dinge rein, welche ich später im Programm formatiere und in eine txt datei schreibe.
    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    Also mittlerweile bringen mich die Verschiedenen Antworten durcheinander.

    Ja natürlich nutze ich das DGV als Eingabemaske und Datenhalter. Solange ich das Programm nicht schließe habe ich eigentlich gedacht kann ich die Werke aus den Zellen einfach formatieren und eben in eine .txt schreiben.

    Im Prinzip wie mit einem Textfeld:

    VB.NET-Quellcode

    1. Dim text
    2. If TextBox1.Text = "" Then
    3. text = " "
    4. Else
    5. text = TextBox1.Text.PadRight(5, " ")
    6. End If


    Und später wird es dann in die Datei geschrieben....
    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    Solange du die Daten nicht irgendwann mal wieder aus der Datei in das Grid laden willst, vergewaltige ruhig dein Grid ;)

    Das hier hat nicht funktioniert?

    mrMo schrieb:


    For Each row As DataRow in DataGrid1.Rows
    'do stuff
    Next
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @VBDev

    mrMo schrieb:

    Solange du die Daten nicht irgendwann mal wieder aus der Datei in das Grid laden willst, vergewaltige ruhig dein Grid
    Also man soll die Daten von der GUI schon trennen...
    Wie schon gesagt - mit einer kleinen Daten-Klasse könnte man obiges schon zusammenstellen...
    rudimentäres Beispiel

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class Form1
    3. Dim myList As New BindingList(Of myDataItemClass)
    4. Dim myBS As New BindingSource
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. myBS.DataSource = myList
    7. myDGV.DataSource = myBS
    8. AddHandler myBS.CurrentItemChanged, AddressOf CurrentItemChanged
    9. End Sub
    10. Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    11. myBS.Add(New myDataItemClass("", 0))
    12. formatText()
    13. End Sub
    14. Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
    15. myBS.RemoveCurrent()
    16. End Sub
    17. Private Sub CurrentItemChanged(sender As Object, e As EventArgs)
    18. formatText()
    19. End Sub
    20. Private Sub formatText()
    21. Dim dataItem = DirectCast(myBS.Current, myDataItemClass) : If dataItem Is Nothing Then Return
    22. If dataItem.Vorname = "" AndAlso dataItem.Alter = 0 Then dataItem.FormatText = "???" : Return
    23. If dataItem.Vorname = "" Then dataItem.FormatText = "Vorname ?" : Return
    24. If dataItem.Alter = 0 Then dataItem.FormatText = "Alter ?" : Return
    25. dataItem.FormatText = String.Concat(dataItem.Alter.ToString.PadLeft(3, "0"c), dataItem.Vorname.PadLeft(10, "."c))
    26. End Sub
    27. End Class
    28. Public Class myDataItemClass
    29. Public Sub New(ByVal Vorname As String, Alter As Integer)
    30. _Vorname = Vorname
    31. _Alter = Alter
    32. End Sub
    33. Public Property Vorname() As String
    34. Public Property Alter() As Integer
    35. Public Property FormatText() As String
    36. End Class

    mrMo schrieb:

    Solange du die Daten nicht irgendwann mal wieder aus der Datei in das Grid laden willst, vergewaltige ruhig dein Grid ;)

    Das hier hat nicht funktioniert?

    mrMo schrieb:


    For Each row As DataRow in DataGrid1.Rows
    'do stuff
    Next


    Hallo, nun komme ich endlich nach längerer Zeit wieder dazu an meinem Projekt weiterzuarbeiten und habe festgestellt dass ich garnicht geantwortet habe.

    Ja das Funktioniert soweit sehr gut, aber es bleibt noch das Problem dass ich einzelne Zellen des DataGridViews auslesen muss, also z.B.

    FOR EACH row AS DataRow In DataGridView1.Rows
    cfile.WriteLine("START" & id & name & testspalte)
    NEXT
    cfile.Close()

    In diesen Spalten können teilweise Strings, Integer, Floats oder auch Bool Werte enthalten sein.
    Also entweder eingaben/selects oder Checkboxen innerhalb des DGV.

    MfG. VBDev
    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    Bist du ganz sicher dass das hier funktioniert?

    VB.NET-Quellcode

    1. For Each row As DataRow in DataGrid1.Rows
    2. 'do stuff
    3. Next


    Also bei mir geht es nicht :)

    versucht es heirmit

    VB.NET-Quellcode

    1. For Each row As DataGridViewRow In DataGridView1.Rows
    2. MessageBox.Show(row.Cells(2).Value.ToString)
    3. Next


    dabei ist 2 die zelle der row die du ansprechen möchtest.ahja und die letzte row musste du natürlich ausschliesen, weil die ja meistesn leer ist (AllowUserToAddRows) eigentschaft der dgv.
    Hier könnte meine Signatur stehen.
    Stimmt, DataGrindVIewRow passt eher :D Ich habe auch eher auf die generelle Logik geschaut, unklar war mir wie ich die Zellen anspreche.
    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    @VBDev
    Wieso so kompliziert?

    Was dir hier gesagt wurde reicht ja völlig.
    An deiner Stelle würde ich mir erstmal ne Tabelle anlegen.
    Wenn es nur im einen Datensatz handelt reicht eine DataTable und du brauchst kein DataSet.

    DataTable findest du vermutlich auch nicht in der Standart Toolbox.


    eine DataTable erzeugst du mit

    VB.NET-Quellcode

    1. dim Tabelle as DataTable = New DataTable("Meine Daten")


    Jetzt ist die Frage: Sind deine Columns vorgegeben oder sollen sie variabel sein?

    Wenn vorgegeben dann erstellst du die Columns einfach so:

    VB.NET-Quellcode

    1. with Tabelle.columns
    2. .Add("Column1enthaeltStrings",GetType(System.String))
    3. .add("Column2enthaeltBoolean",GetType(System.Boolean))
    4. End With


    Jetzt verbindest du das ganze mit und übergibst dem DataGridView die Tabelle als DataSource.

    Du kannst je nach Einstellugn des DGW dem User erlauben, Daten zu ändern.

    Ich würde das ganze als XML Datei speichern damit Daten nicht verloren gehen.
    Geht ganz leicht mit Tabelle.WriteXML("PFAD\DATEINAME\.xml")
    Wenn du eine Live-Speicherung deiner Datenänderung haben willst dann schreib dir eine Funktion die beim cellvaluechanged ereignes des DGV auftritt.

    Daten Abfragen kannst du wie oben bereits beschrieben ganz leicht

    VB.NET-Quellcode

    1. For Each row As DataGridViewRow In DataGridView1.Rows
    2. Dim Rowcontent As String = ""
    3. For Each cell As DataGridViewCell In row.Cells
    4. Rowcontent = Rowcontent & ";"
    5. Next
    6. Debug.WriteLine(Rowcontent.TrimEnd(";"))
    7. Next


    Möglich ist damit fast alles.

    EDIT:

    Ein DataGridView ist so aufgebaut:




    um eine einzelne Zelle anzusprechen brauchst du den index der Zeile und den Namen oder den Index der Spalte

    im Beispiel Zeile 2 Splate 2: Value ist False

    VB.NET-Quellcode

    1. Dim gesuchtesvalue As String = Datagridview1.Rows(1).Cells(1).FormattedValue.ToString

    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „razzzer530i“ ()