vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
DataGridView zu Zeile Scrollen mit erster anderer Hintergrundfarbe einer Zelle 
Autor: RLO
Datum: 17.12.20 12:28

Hallo zusammen,

ich habe folgendes Problem bei dem ich nicht weiterkomme.

Ich habe eine befüllte DataGridView.
Mit folgendem Code lese ich eine Textdatei darin ein und lege die Tabelle fest und formatiere diese. Gleichzeitig suche ich nach einem bestimmten Wort und lasse die Hintergrundfarbe der Zellen in rot färben in denen der Begriff gefunden wurde.

    Private Sub ButtonSuchen_Click_1(sender As Object, e As EventArgs) Handles _
      ButtonSuchen.Click
        DataGridView1.Rows.Clear()
        DataGridView1.Columns.Clear()
        Dim lines As String() =
Microsoft.VisualBasic.Split(My.Computer.FileSystem.ReadAllText(
"W:\CD-Liste\ARTISTS.txt", System.Text.Encoding.Default),
Microsoft.VisualBasic.vbCrLf)
        With DataGridView1
            .Columns.Add("Interpret", "Interpret")
            .Columns.Add("Titel", "Titel")
            .Columns.Add("Genre", "Genre")
            .Columns.Add("Standort", "Standort")
 
            Dim fields() As String
            For Each line As String In lines
                fields = line.Split(";"c)
                .Rows.Add(fields)
            Next line
        End With
 
        DataGridView1.Columns("Interpret").Width = 350
        DataGridView1.Columns("Titel").Width = 340
        DataGridView1.Columns("Genre").Width = 150
        DataGridView1.Columns("Standort").Width = 90
 
        DataGridView1(DataGridView1.CurrentCell.ColumnIndex, _
          DataGridView1.CurrentCell.RowIndex).Selected = False
 
        DataGridView1.Visible = True
        PictureBoxCover.Visible = False
 
        For Each Iterrow As DataGridViewRow In DataGridView1.Rows
            For Each c As DataGridViewCell In Iterrow.Cells
                If c.Value IsNot Nothing AndAlso c.Value.ToString.Contains( _
                  TextBox1.Text) Then
                    c.Style.BackColor = Color.Red
                    c.Style.ForeColor = Color.Yellow
                Else
                    c.Style.BackColor = Color.White
                End If
 
                If c.Style.BackColor = Color.Red Then
                    DataGridView1.FirstDisplayedScrollingRowIndex = _
                      DataGridView1.Rows.Count - 1
                End If
            Next
        Next
 
    End Sub
Nun möchte ich, dass
1. die DataGridView auf die erste Zeile scrollt in der eine Zelle umgefärbt wurde
2. mit einem Button "Weiter" ich auf die nächste Zeile mit der nächsten umgefärbten Zelle scrolle

dazu habe aktuell diesen Code in Verwendung, jedoch springt dieser immer ans Ende der DGV.

                If c.Style.BackColor = Color.Red Then
                    DataGridView1.FirstDisplayedScrollingRowIndex = _
                      DataGridView1.Rows.Count - 1
                End If
Ich habe jetzt bereits viele Stunden damit verbracht eine Lösung oder Lösungsansätze im Internet zu finden, aber alles was ich probiert habe, hat nicht funktioniert.

Hat irgend jemand eine Lösung für mich?

Grüße Roland
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView zu Zeile Scrollen mit erster anderer Hintergrundfarbe einer Zelle 
Autor: effeff
Datum: 17.12.20 12:55

Das Schreiben von Daten direkt in ein DataGridView ist eine sehr schlechte Möglichkeit, auch wenn das nachfolgende Beispiel das benutzt. Du solltest die Daten besser in einer DataTable halten und diese mittels BindingSource an das DataGridView binden!

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        With DataGridView1
            .Columns.Add("Vorname", "Vorname")
            .Columns.Add("Nachname", "Nachname")
            .Rows.Add("Hinni", "Gibsnich")
            .Rows.Add("Kalli", "Unbekannt")
            .Rows.Add("Ernst", "Moschlinger")
            .Rows.Add("Konrad", "Gunslinger")
            .Rows.Add("Bernhard", "Essensschlinger")
            .Rows.Add("Hinni", "Gibsnich")
            .Rows.Add("Kalli", "Unbekannt")
            .Rows.Add("Ernst", "Moschlinger")
            .Rows.Add("Kalli", "Gunslinger")
            .Rows.Add("Bernhard", "Essensschlinger")
        End With
 
        ZellenEinfaerben()
 
    End Sub
 
    Private Sub ZellenEinfaerben()
        For i As Integer = 0 To DataGridView1.Rows.Count - 1
            If DataGridView1.Rows(i).Cells(0).Value = "Kalli" Then
                DataGridView1.Rows(i).Cells(0).Style.BackColor = BackColor.Red
            End If
        Next
    End Sub
 
    Private Sub btnFindFirst(sender As Object, e As EventArgs) Handles _
      btnFindFirst.Click
        For i = 0 To DataGridView1.Rows.Count - 1
            If DataGridView1.Rows(i).Cells(0).Style.BackColor = BackColor.Red _
              Then
                DataGridView1.CurrentCell = DataGridView1.Rows(i).Cells(0)
                Exit Sub
            End If
        Next
    End Sub
 
    Private Sub btnFindNext_Click(sender As Object, e As EventArgs) Handles _
      btnFindNext.Click
        Dim iIndex As Integer = DataGridView1.CurrentCell.RowIndex + 1
 
        For i As Integer = iIndex To DataGridView1.Rows.Count - 1
            If DataGridView1.Rows(i).Cells(0).Style.BackColor = BackColor.Red _
              Then
                DataGridView1.CurrentCell = DataGridView1.Rows(i).Cells(0)
                Exit Sub
            End If
        Next
    End Sub
End Class

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView zu Zeile Scrollen mit erster anderer Hintergrundfarbe einer Zelle 
Autor: RLO
Datum: 17.12.20 13:08

Danke für den Tipp

Ich bin Einsteiger/Anfänger und mir fehlt da noch ziemlich viel Wissen.
Habe das genutzt was mir das Netz angeboten hat.

Nun werde ich deinen Tipp versuchen und hoffe ich bekomme das hin.

Grüße Roland
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView zu Zeile Scrollen mit erster anderer Hintergrundfarbe einer Zelle 
Autor: effeff
Datum: 17.12.20 14:04

Hier ist noch ein Beispiel mit einer DataTable und einer BindingSource. Es werden ganze Zeilen markiert und die gefundene Zeile als aktive gesetzt; Gesucht wird hier der Vorname "Kalli". Sobald der letzte Eintrag markiert wurde, wird wieder von vorne gesucht:
Public Class Form1
 
    Dim dtNamen As DataTable
    Dim iKalli As Integer = 0
 
    Dim LeuteAuflistung As String = "Hinni Gibsnich,Kalli Unbekannt,Erst" & _
      "Moschlinger,Kalli Gunslinger,Bernhard Essensschlinger,Hinni" & _
      "Gibsnich,Kalli Unbekannt,Erst Moschlinger,Konrad Gunslinger,Kalli" & _
      "Essensschlinger"
    Dim arrLeute() As String = Nothing
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dtNamenInitialisieren()
        LeuteAuflisten()
        dgvNamenInitialisieren()
        KalliSuchen()
    End Sub
 
    Private Sub dtNamenInitialisieren()
 
        dtNamen = New DataTable
        dtNamen.TableName = "Namensliste"
 
        Dim keys(1) As DataColumn
        Dim column As New DataColumn
        column.DataType = System.Type.GetType("System.Int32")
        With column
            .ColumnName = "ID"
            .AutoIncrement = True
            .AutoIncrementStep = 1
        End With
        dtNamen.Columns.Add(column)
        keys(0) = column
        dtNamen.PrimaryKey = keys
 
        column = New DataColumn
        column.DataType = System.Type.GetType("System.String")
        column.ColumnName = "Vorname"
        dtNamen.Columns.Add(column)
 
        column = New DataColumn
        column.DataType = System.Type.GetType("System.String")
        column.ColumnName = "Nachname"
        dtNamen.Columns.Add(column)
 
    End Sub
 
    Private Sub dgvNamenInitialisieren()
 
        Dim bs As New BindingSource
        bs.DataSource = dtNamen
 
        With dgvNamen
            .DataSource = bs
            .ReadOnly = True
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .MultiSelect = True
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
            .ScrollBars = ScrollBars.Both
            .RowsDefaultCellStyle.BackColor = Color.White
            .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
            .Columns(0).Width = 50
        End With
    End Sub
 
    Private Sub LeuteAuflisten()
 
        Dim arrPerson() As String = Nothing
 
        arrLeute = LeuteAuflistung.Split(",")
 
        Dim i As Integer = 0
 
        For i = 0 To arrLeute.Count - 1
            arrPerson = arrLeute(i).Split(" ")
            dtNamenFuellen(arrPerson(0), arrPerson(1))
        Next
 
 
    End Sub
    Private Sub dtNamenFuellen(ByVal Vorname As String, ByVal Nachname As _
      String)
 
        Dim newRow As DataRow = dtNamen.NewRow
        newRow("Vorname") = Vorname
        newRow("Nachname") = Nachname
        dtNamen.Rows.Add(newRow)
 
    End Sub
 
    Private Sub KalliSuchen()
        For i As Integer = 0 To dgvNamen.Rows.Count - 1
            If dgvNamen.Rows(i).Cells(1).Value = "Kalli" Then
                dgvNamen.Rows(i).DefaultCellStyle.BackColor = BackColor.Red
            End If
        Next
    End Sub
 
    Private Sub btnFindFirstKalli_Click(sender As Object, e As EventArgs) _
      Handles btnFindFirstKalli.Click
 
        FindNextKalli()
 
    End Sub
 
    Private Sub FindNextKalli()
        If iKalli = dgvNamen.Rows.Count Then
            iKalli = 0
        End If
        For i As Integer = iKalli To dgvNamen.Rows.Count - 1
            If dgvNamen.Rows(i).DefaultCellStyle.BackColor = BackColor.Red Then
                dgvNamen.CurrentCell = dgvNamen.Rows(i).Cells(1)
                dgvNamen.Rows(i).Selected = True
                iKalli = i + 1
                Exit Sub
            End If
        Next
    End Sub
 
End Class

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView zu Zeile Scrollen mit erster anderer Hintergrundfarbe einer Zelle 
Autor: RLO
Datum: 17.12.20 15:10

Dankeschön

Frage: Gibt es eine Möglichkeit, dass folgendes in meinem schon verwendeten Code ergänzt wird?

1. die DataGridView auf die erste Zeile scrollt in der eine Zelle umgefärbt wurde
2. mit einem Button "Weiter" ich auf die nächste Zeile mit der nächsten umgefärbten Zelle scrolle

Ich möchte dadurch auch die verschiedenen Möglichkeiten erlernen.

Grüße Roland
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView zu Zeile Scrollen mit erster anderer Hintergrundfarbe einer Zelle 
Autor: effeff
Datum: 17.12.20 15:40

Die Möglichkeiten sind Dir bereits alle im ersten geposteten Beispiel genannt...

Für das Erlernen von Möglichkeiten ist das zweite Beispiel das viel wichtigere, welches Dir nicht nur das Zusammenspiel zwischen DataTable und DataGridView zeigt, sondern mit nur einer einzigen Routine die erste markierte Zeile findet, danach alle weiteren nacheinander und dann wieder am Anfang beginnt. Wenn Du nur einzelne Zellen finden willst und keine kompletten Zeilen kannst Du aus beiden Beispielen das von Dir gewünschte zusammenbauen.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel