En mi aplicación C# (2010) tengo un DataGridView en modo virtual que contiene varios miles de filas. ¿Es posible descubrir qué células están en pantalla en este momento?¿Cómo saber qué filas de DataGridView están actualmente en pantalla?
11
A
Respuesta
25
public void GetVisibleCells(DataGridView dgv)
{
var vivibleRowsCount = dgv.DisplayedRowCount(true);
var firstDisplayedRowIndex = dgv.FirstDisplayedCell.RowIndex;
var lastvibileRowIndex = (firstDisplayedRowIndex + vivibleRowsCount) - 1;
for (int rowIndex = firstDisplayedRowIndex; rowIndex <= lastvibileRowIndex; rowIndex++)
{
var cells = dgv.Rows[rowIndex].Cells;
foreach (DataGridViewCell cell in cells)
{
if (cell.Displayed)
{
// This cell is visible...
// Your code goes here...
}
}
}
}
Actualizado: Se encuentra ahora celdas visibles.
1
No he probado esto por mi cuenta, pero me parece que determinar el rectángulo de una fila usando DataGridView.GetRowDisplayRectangle y verificar si se superpone con el actual DataGridView.DisplayRectangle sería el camino a seguir. Rectangle.IntersectsWith es útil para hacer esto.
Como optimización, utilizaría DataGridView .DisplayedRowCount después de encontrar la primera fila visible para determinar qué filas son visibles.
Cuestiones relacionadas
- 1. ¿Cómo saber cuántas figuras están abiertas actualmente?
- 2. ¿Cómo eliminar filas de DataGridView?
- 3. Índice de fila actualmente seleccionada en DataGridView
- 4. Eliminar varias filas en DataGridView
- 5. C# Shuffling DataGridView Filas
- 6. Obtener las Filas seleccionadas de un DataGridView
- 7. intercambiar filas en datagridview en C#
- 8. Redis publicación/suscripción: ver qué canales están suscritos actualmente a
- 9. filas de orden C# datagridview?
- 10. Cómo saber en qué pantalla se muestra un JDialog
- 11. ¿Por qué no se están actualizando las celdas de DataGridView?
- 12. C# - ¿Cómo refrescar DataGridView después de la eliminación de filas
- 13. Marcador visual al mover filas en DataGridView
- 14. Cómo saber qué fuentes están referenciadas y cuáles están incrustadas en un documento PDF
- 15. Cómo deshabilitar la creación de nuevas filas en un DataGridView?
- 16. ¿Cómo saber si un cierre está actualmente en curso?
- 17. Sql Server 2000 - ¿Cómo puedo averiguar qué procedimientos almacenados se están ejecutando actualmente?
- 18. C# /. NET cómo resaltar ciertas filas en DataGridView
- 19. Agregar filas a Datagridview con columnas existentes
- 20. Funcionalidad de copiar/pegar filas en DataGridview (aplicación de Windows)
- 21. DataGridView: ¿qué hace AllowUserToAddRows?
- 22. Qué herramientas de diseño de pantalla están disponibles
- 23. Diferentes valores de ComboBox en DataGridView en filas diferentes
- 24. Cómo saber lo que Colorscheme una sesión Vim utiliza actualmente
- 25. ¿Cómo saber la resolución de pantalla en "DP"?
- 26. Quiero saber qué funciones están disponibles desde un Win32.DLL
- 27. Orchard CMS: cómo saber qué versión estoy ejecutando actualmente y la mejor manera de actualizar
- 28. ¿Cómo saber cuando todas las llamadas ajax están completos
- 29. ¿Cómo puedo saber si la pantalla está activada en Android?
- 30. ¿Cómo saber si los rieles están en producción?
esto es exactamente lo que necesitaba! Gracias. – Seidleroni
ATTN: No puede calcular lastvibileRowIndex así si tiene filas invisibles en la cuadrícula. En tal caso, debe marcar la propiedad Visible de row en for-loop y contar esas filas visibles hasta llegar a vivibleRowsCount. –