2009-07-17 15 views
2

Ersten Beitrag, aber lange Zeit Browser :)Datagridview CellPainting nicht vollständig Arbeiten an Scroll

hier ist also mein Problem: Im Grunde habe ich eine Datagridview, die ich mit dem Benutzer interagieren verwenden. In allen Zeilen gibt es einen "Info" -Knopf, der die Illusion erzeugt, dass er eine weitere Reihe darunter mit allen zusammengelegten Zellen hinzufügt (eine lange Zelle über die gesamte Reihe) und den Text und die Bilder zeichnet, die die darüber liegende Reihe beschreiben auf die "Infozelle".

Dies funktioniert großartig, außer wenn die Datagridview vertikal gescrollt wird, dann scheint es, dass das Gemälde nicht aufgerufen wird und das Gitter ist vermasselt. Irgendwelche Ideen?

Hier ist eine grundlegende Gliederung des Codes:

private void grid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e){  
    // Loop through and draw all of the open information rows 
    foreach (int i in openInfoCells) { 
     if (i >= grid.FirstDisplayedCell.RowIndex && 
      i <= (grid.DisplayedRowCount(true) + grid.FirstDisplayedCell.RowIndex)) { 

      // Draw Rectangle 
      .... 

      // Draw Text or Image 
      .... 
     } 
    } 
} 

Antwort

2

figured it out. Benötigt ein Doppelpuffer für die Datagridview zu erstellen, indem Sie folgendermaßen vorgehen:

class CustomDataGridView : DataGridView { 

public CustomDataGridView() { 
    base.DoubleBuffered = true; 
} 
} 

ich auch den Code in das RowPostPainting Ereignis gesetzt und verändert die if-Anweisung:

if (e.RowIndex == i) { .... } 

Hoffentlich hilft dies jemand anders aus .

Verwandte Themen