tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
916
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    benji2010 benji2010 ist offline Grünschnabel
    Registriert seit
    Aug 2010
    Beiträge
    1
    Hallo zusammen,

    da ich berufsmäßig wieder mit VB2008 EE zu tun habe und gleich vor einigen Problemen stehe, bitte ich hiermit um Hilfe.

    Ich möchte ein Programm erstellen, welches mir Aufträge aufzeigt. (siehe Anhang)
    Ich habe bereits die Daten von Access hinzugefügt. Nun möchte ich gerne das
    die Zellen von Aufträgen, bei denen das Datum (Vorgangstart) hinter dem aktuellen Datum liegt, rosa dargestellt sind.

    Gerne möchte ich auch, dass wenn ich auf einen Button klicke, nur bestimmte Maschinen angezeigt werden. (z.B. CHDVSH) Also ein Filter...

    Ist dies überhaupt möglich ? Wenn ja wie komplex und wie und wo fange ich am Besten an ? Habe zwar bereits einige Stunden Internetrecherche hinter mir, jedoch ohne richtigen Erfolg.

    Danke im Voraus,
    Benjamin
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken DataGridView - farbige Zellen und Sortierungen-programm.jpg  
     

  2. #2
    Avatar von Blackhawk50000
    Blackhawk50000 Blackhawk50000 ist offline Mitglied Brokat
    Registriert seit
    Oct 2007
    Ort
    Erding As, Bayern, Germany, Germany
    Beiträge
    320
    das ist ne coole sache, diese Zeilen zu färben =)

    das ganze schaut so aus....

    Inm folgenden code wird NACH DEM sortieren meine Paint methode aufgerufen...
    dort frage ich nach warenausgang unf färbe diese zeilen rot und dann suche ich nach wareneingang und färbe diese zeilen rot.

    du würdest nach datum größer oder kleiner heute fragen =)

    private void dataGridView1_Sorted(object sender, EventArgs e)
    {
    PaintRows();
    }

    private void PaintRows()
    {
    for (int i = 0; i <= dataGridView1.RowCount - 1; i++)
    {
    if (dataGridView1.Rows[i].Cells["Vorgang"].Value.ToString() == "Wareneingang")
    {
    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Green;
    }
    else if (dataGridView1.Rows[i].Cells["Vorgang"].Value.ToString() == "Warenausgang")
    {
    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red;
    }
    }
    }
     

  3. #3
    CShark CShark ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    17
    Statt das ganze mit einer For-Schleife zu machen kann man diese auch einfach durch eine foreach-schleife ersetzen, also:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
    if (row.Cells["Vorgang"].Value.ToString() == "Wareneingang")
    {
    row.DefaultCellStyle.BackColor = Color.Green;
    }
    else if (row.Cells["Vorgang"].Value.ToString() == "Warenausgang")
    {
    row.DefaultCellStyle.BackColor = Color.Red;
    }
    }

    Bringt nicht so viel, aber man spart sich Etwas Quellcode und kann sich dann später, wenn man sich das ganze nochmal anguckt noch genau was man da eigentlich macht.
    Nur so eine Idee.
     

  4. #4
    raiguen raiguen ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Ort
    Salzhemmendorf(Nds)
    Beiträge
    51
    Zitat Zitat von benji2010 Beitrag anzeigen
    Ich habe bereits die Daten von Access hinzugefügt.
    Doch wohl hoffentlich über eine BindingSource!? Das vereinfacht nämlich die Filterung:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
            private void buttonFilter_Click(object sender, EventArgs e)
            {
                var bs = dgvAnzeige.DataSource as BindingSource;
                if (String.IsNullOrEmpty(bs.Filter))
                {
                    bs.Filter = String.Format("Maschine='{0}'", "CHDVSH");
                    //--oder vereinfacht:
                    //bs.Filter = "Maschine='CHDVSH'";
                }
                else   //--Filer wieder aufheben
                {
                    bs.Filter = String.Empty;
                }
            }
    Im Codebeispiel gehe ich vereinfacht davon aus, dass das zu filternde Feld in der Tabelle 'Maschine' heisst...

    Nun zum bedingten Einfärben von Zellen (bzw auch ganzen Zeilen):
    Wir lassen das DGV sich seine Zellen quasi selbst zeichnen
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
            private void dgvAnzeige_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            {
                DataGridView dgv = (DataGridView)sender;
     
                if (e.RowIndex < 0)
                    return;
     
                var rwCurrent = ((System.Data.DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row;
     
                if (Convert.ToDateTime(rwCurrent["VorgangStart"]) < DateTime.Today)
                    {
                    e.CellStyle.BackColor = Color.LightCoral;
                }
            }
    Da das CellPainting-Event bei JEDER Zelle gefeuert wird, reicht es aus, bei erfüllter Bedingung nur die Zelle entsprechend einzufärben. Da die Bedingung unabhängig der gerade zu zeichnenden Zelle immer abgefragt wird, ist als Endergebnis dann die ganze Datenzeile schweinchenrosa (oder wie auch immer) eingefärbt
     
    Es ist erstaunlich, was man alles findet, wenn man etwas sucht...

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 25.03.10, 12:52
  2. Zellen verbinden in DataGridView
    Von tomkruse im Forum .NET Windows Forms
    Antworten: 0
    Letzter Beitrag: 28.09.09, 13:46
  3. [C#] DataGridView, Zellen wie bei Excel formatieren
    Von chris_de_luxe im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 12.01.09, 15:14
  4. [c#] DataGridView Zellen editieren / Reihen löschen
    Von BeaTBoxX im Forum .NET Windows Forms
    Antworten: 10
    Letzter Beitrag: 27.09.07, 20:52
  5. [ORACLE] innerhalb einer Spalte mehrere Sortierungen
    Von crazyPower im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 05.07.05, 22:59