vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

VB.NET - Ein- und Umsteiger
Komischer Effekt bei der farblichen Markierung einer DGV-Zeile??? 
Autor: xTobix
Datum: 28.04.09 14:37

hallo!

ich zerbrech mir schon seit stunden den kopf über dieses problem. ich will folgendes erreichen:
ein datagridview soll aus einem dataset (mittels bindingsource angehängt) gefüllt werden. beim füllen sollen bestimmte zeilen farblich markiert werden, abhängig von einem bestimmten spaltenwert.

mit dem "cell_formating"-event des dgv ist es auch kein problem die einzelne ZELLE in der suchspalte mit "e.CellStyle.ForeColor = Color.Red" zu markieren.

jetzt will ich aber noch die zellen der zeile so markieren. mit der Forschleife sollte es meiner meinung nach gehen. jedoch passiert hier das komische.
in der ersten spalte funktioniert das noch (er markiert nur die zellen, bei denen in der einen spalte der wert gefunden wurde). die restlichen zellen markiert er aber ALLE...egal ob er den wert gefunden hat oder nicht.

wie kann das sein? er kann doch die FOR-schleife nur dann durchlaufen, wenn in der zeile (in der entprechenden spalte) der gesuchte wert gefunden wurde. vor allem macht es mich ganz verrückt, dass in der ersten spalte es noch funktioniert. übersehe ich was?

ich habe mir zwar mit einem ELSE-zweig geholfen, der die falsch markierten zeilen wieder "entfärbt, denoch bin ich damit nicht zufrieden. das kostet doch bestimmt performance, wenn ich diesen 2. (eigentlich unnötigen) schritt mache. das programm soll später nämlich von 6 personen verwendet werden.

weiß einer rat?

ich hab den code mal angehängt. wer das problem nachvollziehen möchte muß eigentlich nur eine datenbank anhängen...ein dgv erstellen (allowuseraddrows=false...kommt sonst zu einem fehler), eine textbox1 und ein button.

in der angehängten version funktioniert es wie gesagt...aber kommentiert den inhalt des ELSE-zweigs aus, dann seht ihr mein problem.

Public Class Form1
  Dim conn As New SqlConnection("Server=.\SQLEXPRESS;Initial" & _
    "Catalog=Import;Integrated Security=True")
  Dim da As New SqlDataAdapter("SELECT * FROM Auftragsdatensatz", conn)
  Dim bs As New BindingSource
  Dim ds As New DataSet
 
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles Button1.Click
    ds.Clear()
    da.Fill(ds, "AuftragsDatensatz")
    bs.DataSource = ds
    bs.DataMember = "AuftragsDatensatz"
    DataGridView1.DataSource = bs
  End Sub
 
 
 
  Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, ByVal _
    e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles _
    DataGridView1.CellFormatting
 
    'Spalte nach der ein bestimmter Wert gesucht wird=> wenn Wert vorhanden 
    ' wird Zeile markiert
    If DataGridView1.Columns(e.ColumnIndex).Name = "TYP" Then
      If e.RowIndex < DataGridView1.Rows.Count Then
        If e.Value.ToString.IndexOf(TextBox1.Text) >= 0 Then
 
 
          ''Markiert die jeweilige Zelle. Das hier funktioniert einwandfrei. _
            Nur bei den restlichen Spalten gibts Probleme (siehe ELSE-Anweisung)
          'e.CellStyle.ForeColor = Color.Black
          'e.CellStyle.BackColor = Color.Red
 
          For i As Integer = 0 To DataGridView1.ColumnCount - 1
            DataGridView1.Rows(e.RowIndex).Cells(i).Style.BackColor = _
              Color.Yellow
            DataGridView1.Rows(e.RowIndex).Cells(i).Style.ForeColor = Color.Red
          Next
 
        Else
 
          'Notwendig zum die Spalten, die nicht den Typ haben, in normalen 
          ' Farben anzeigen. Eigentlich sollte ich diese Anweisung nicht 
          ' brauchen, aber aus irgendeinem Grund
          'markiert er in der oberen IF-Schleife ALLE Spalten Gelb (außer die 
          ' erste).
          For i As Integer = 0 To DataGridView1.ColumnCount - 1
            DataGridView1.Rows(e.RowIndex).Cells(i).Style.BackColor = _
              Color.White
            DataGridView1.Rows(e.RowIndex).Cells(i).Style.ForeColor = _
            Color.Black
          Next
 
        End If
      End If
    End If
  End Sub
End Class


Beitrag wurde zuletzt am 28.04.09 um 14:52:13 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Komischer Effekt bei der farblichen Markierung einer DGV-Zei...899xTobix28.04.09 14:37
Re: Komischer Effekt bei der farblichen Markierung einer DGV...591ModeratorDaveS29.04.09 09:54
Re: Komischer Effekt bei der farblichen Markierung einer DGV...570xTobix29.04.09 11:34

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-2025 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