| |
VB.NET - Ein- und UmsteigerDataGridView 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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|