Datagridview prüfen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Germanys-Life.

    Datagridview prüfen

    hallo

    ich möchte gerne prüfen ob was in meinen Datagridview steht was dann makiert werden soll. Das sollte so gehen:

    Ich geben namen in Textboxen ein und dann soll beim speichern als HTML datei die namen anders Farblich abgespeichert werden.

    Mein HTML speicher code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub DataGridViewToHTML(ByVal grdView As DataGridView, Optional ByVal StandardName As String = "")
    2. 'Speicher Funktion der HTML
    3. 'speicher-dialog
    4. Dim filesave As SaveFileDialog = New SaveFileDialog
    5. filesave.AddExtension = True
    6. filesave.Filter = "HTML-Dateien (*.htm)|*.htm"
    7. filesave.FileName = StandardName
    8. If filesave.ShowDialog = DialogResult.OK Then
    9. 'tabelle anfangen
    10. Dim sw As New IO.StreamWriter(filesave.FileName, False)
    11. sw.WriteLine("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 transitional//DE"">")
    12. sw.WriteLine("")
    13. sw.WriteLine("")
    14. sw.WriteLine("<body bgcolor=""#242424"">")
    15. If datum.Text = "" Then
    16. If uhrzeit.Text = "" Then
    17. Else
    18. sw.WriteLine("<font color=""#FFFFFF""> Stand: " & datum.Text & " -- " & uhrzeit.Text & "</font>")
    19. End If
    20. Else
    21. sw.WriteLine("<font color=""#FFFFFF""> Stand: " & datum.Text & " -- " & uhrzeit.Text & "</font>")
    22. End If
    23. sw.WriteLine("<p></p>")
    24. sw.WriteLine("<table border=""1"" width=""307"">")
    25. 'spaltenbezeichnung anlegen
    26. sw.WriteLine("<center><tr>")
    27. For j As Integer = 0 To grdView.ColumnCount - 1
    28. sw.Write("<center><td width=""50""><font color=""#FFFFFF""><b>")
    29. Dim celltext As String = grdView.Columns.Item(j).HeaderText
    30. If celltext = vbNullString Then celltext = ""
    31. sw.Write(celltext)
    32. sw.WriteLine("</b></td></font></center>")
    33. Next
    34. sw.WriteLine("</tr>")
    35. sw.WriteLine("")
    36. 'zellen füllen
    37. For i As Integer = 0 To grdView.RowCount - 1
    38. sw.WriteLine("<tr>")
    39. For j As Integer = 0 To grdView.Columns.Count - 1
    40. sw.Write("<td width=""50""><font color=""#FFFFFF"">")
    41. Dim celltext As String = CStr(grdView.Item(j, i).Value)
    42. If celltext = vbNullString Then celltext = ""
    43. sw.Write(celltext)
    44. sw.WriteLine("</td></font>")
    45. Next
    46. sw.WriteLine("</tr><center>")
    47. sw.WriteLine("")
    48. Next
    49. 'tabelle schließen
    50. sw.WriteLine("</table></body>")
    51. If CheckBox1.Checked = True Then
    52. sw.WriteLine("<font color=""#FFFFFF""> " & ToolStripStatusLabel3.Text & "</font>")
    53. End If
    54. sw.Close()
    55. End If
    56. End Sub


    ich hoffe ihr könnt mir helfen

    MfG Germanys-Life
    ok

    Ich habe es jetzt doch selbst hinbekommen. Allerdings prüft er nur die erste zeile.

    Ich hoffe ihr könnt mir weiter helfen.

    VB.NET-Quellcode

    1. Dim eingabe As String
    2. Dim i, g As Integer
    3. eingabe = TextBox1.Text
    4. Try
    5. For i = 0 To DataGridView1.Rows.Count - 1
    6. For g = 0 To DataGridView1.Rows.Count - 1
    7. If CStr(DataGridView1.Rows(i).Cells(g).Value) = CStr(eingabe) Then
    8. DataGridView1.Rows(i).Cells(g).Style.BackColor = Color.Turquoise
    9. Else
    10. DataGridView1.Rows(i).Cells(g).Style.BackColor = Color.White
    11. End If
    12. Next g
    13. Next i
    14. Catch ex As Exception
    15. MsgBox(ex.Message)
    16. End Try


    In der HTML datei prüfe ich das so, was auch funktioniert mit der 1. zeile (Das wiederrum mit dem fehler von oben zu tun hat):
    Spoiler anzeigen

    VB.NET-Quellcode

    1. If grdView.Rows(i).Cells(j).Style.BackColor = Color.Turquoise Then
    2. sw.Write("<td width=""50""><font color=""#00eaff"">")
    3. Else
    4. sw.Write("<td width=""50""><font color=""#FFFFFF"">")
    5. End If


    MfG Germanys-Life
    Bitte mach den TryCatch weg. TryCatch ist eine überaus gefährliche Codestruktur.
    Fehler soll man ganz ganz vordringlich nicht behandeln, sondern man soll sie finden und korrigieren. Und genau das erschwert ein TryCatch, welcher die Fehlermeldungen nämlich wegfängt. Gugge AvoidTryCatch

    Dann liegt ein Fehler sicher hier:

    VB.NET-Quellcode

    1. For i = 0 To DataGridView1.Rows.Count - 1
    2. For g = 0 To DataGridView1.Rows.Count - 1
    gesehen?

    Bitte wandle nicht Strings in Strings um

    VB.NET-Quellcode

    1. CStr(eingabe)


    Warum nennst du die Laufvariablen i und g, statt x,y, oder iRow, iCol?
    Und dann kann man auf DGV-Zellen auch etwas bequemer zugreifen:

    VB.NET-Quellcode

    1. Dim eingabe As String
    2. eingabe = TextBox1.Text
    3. For y = 0 To DataGridView1.RowCount - 1
    4. For x = 0 To DataGridView1.ColumnCount - 1
    5. Dim c As DataGridViewCell = DataGridView1(x, y)
    6. If c.Value.ToString = eingabe Then
    7. c.Style.BackColor = Color.Turquoise
    8. Else
    9. c.Style.BackColor = Color.White
    10. End If
    11. Next x
    12. Next y
    hi
    erst einmal danke für deine rasche antwort und ich werde es mir merken

    wenn ich jetzt deinen code benutze kommt der fehler



    ich hoffe du kannst mir nochmal helfen

    MfG
    Das kannst du doch selbst herausfinden:
    Irgendetwas wird in dieser Zeile verwendet, was Nothing ist.
    (oder präzise formuliert: Ein Objektverweis wird verwendet, obwohl er nicht auf eine Objektinstanz festgelegt wurde)
    Wenndes rausgefunden hast, kannst dus abfangen durch folgende einzufügende Codezeile:

    VB.NET-Quellcode

    1. if ... is Nothing Then Continue For
    habe es jetzt gelöst

    hier einmal der code:

    VB.NET-Quellcode

    1. Dim eingabe As String
    2. eingabe = TextBox1.Text
    3. For y = 0 To DataGridView1.RowCount - 1
    4. For x = 0 To DataGridView1.ColumnCount - 1
    5. Dim c As DataGridViewCell = DataGridView1(x, y)
    6. If c.Value Is Nothing Then Continue For
    7. If c.Value.ToString = eingabe Then
    8. c.Style.BackColor = Color.Turquoise
    9. End If
    10. Next x
    11. Next y


    danke nochmal für deine hilfe

    MfG Germanys-Life