una - ocultar columna gridview c#
Las filas visibles en DataGrid están desactivadas por 1(contadas usando ContainerFromItem) (1)
Esto es lo que finalmente funcionó para mí:
uint VisibleRows = 0;
var TicketGrid = (DataGrid) MyWindow.FindName("TicketGrid");
foreach(var Item in TicketGrid.Items) {
var Row = (DataGridRow) TicketGrid.ItemContainerGenerator.ContainerFromItem(Item);
if(Row != null) {
/*
This is the magic line! We measure the Y position of the Row, relative to
the TicketGrid, adding the Row''s height. If it exceeds the height of the
TicketGrid, it ain''t visible!
*/
if(Row.TransformToVisual(TicketGrid).Transform(new Point(0, 0)).Y + Row.ActualHeight >= TicketGrid.ActualHeight) {
break;
}
VisibleRows++;
}
}
Hasta e incluyendo la fila 9 muestra 9 de 9 visibles . La fila "medio visible" da como resultado 9 de 10 visibles . En realidad, es mejor para mis propósitos que esto no cuente como una fila visible, ¡así que esto me servirá! :)
Nota: si reutiliza mi código sin usar el break
, las filas invisibles después de la fila infractora arrojarán una NullRefException
.
Tengo un DataGrid
de dimensiones variables que dependen de screen-res. Necesito saber cuántas filas son visibles para el usuario. Aquí está mi código:
uint VisibleRows = 0;
var TicketGrid = (DataGrid) MyWindow.FindName("TicketGrid");
foreach(var Item in TicketGrid.Items) {
var Row = (DataGridRow) TicketGrid.ItemContainerGenerator.ContainerFromItem(Item);
if(Row != null && Row.IsVisible) {
VisibleRows++;
}
}
Estoy usando el siguiente código para probar los vars:
MessageBox.Show(String.Format("{0} of {1} rows visible", VisibleRows, TicketGrid.Items.Count));
- Cuando no hay filas en la cuadrícula, muestra correctamente 0 de 0 filas visibles :
- Cuando hay 1 fila en la grilla, muestra correctamente 1 de 1 filas visibles :
- Cuando hay 9 filas en la cuadrícula, muestra correctamente 9 de 9 filas visibles :
- La siguiente fila es "medio visible", por lo que la contaré mostrando 10 de las 10 filas visibles como correctas:
- Sin embargo, la siguiente fila que se agregará es aparentemente visible, mostrando incorrectamente 11 de las 11 filas visibles :
- Las filas agregadas después de esto son correctas (barra el callejero 1), por ejemplo, 11 de las 18 filas visibles :
No puedo simplemente - 1
, porque solo es incorrecto después de haber agregado cierto número. No puedo verificar > 10
, porque las dimensiones son variables.
¿Cómo puedo arreglar esto?