2011-11-24 27 views
6

Tengo un DataGrid unido a un DataTable. Quiero que el DataGrid siempre tenga al menos diez filas (vacías), también si no hay suficientes elementos de datos reales (los datos vienen poco a poco).
ExampleLlenar cuadrícula de datos con filas vacías

Un enfoque sería añadir fácilmente diez filas vacías al DataTable en la inicialización. Pero cuando aparece un elemento de datos real, no puedo agregar fácilmente la fila, tengo que encontrar la primera fila vacía para sobrescribirla, lo que no es muy útil.
Entonces, ¿alguien sabe de una manera más inteligente/integrada para lograr esto?

+0

¿Qué tal si solo agregas elementos vacíos a tu colección si el 'Conteo 'de la colección es menor que 10? –

+0

Eso es lo que dije, siempre tengo que comprobar cuántas filas reales hay, y agregar o eliminar las filas vacías. Esperaba que hubiera un enfoque más inteligente o incorporado. – SpeziFish

+0

¿Por qué necesita eliminar filas? Además, no es necesario sobrescribir los existentes, simplemente vuelva a enlazar toda la colección si la próxima vez que el recuento es mayor que 10. –

Respuesta

0

que va a ser lío, no importa de qué lado es abordado. Yo diría que su mejor opción (siempre que el contenido de sus celdas de cuadrícula no esté envuelto) es usar un pincel visual (con líneas) como fondo de su DataGrid.

ACTUALIZACIÓN 1 - XAML Está ahí, el truco es usar MinHeight, que producirá una visión de elementos en blanco gracias al fondo de mosaico. Si su cuadrícula se completará con los datos reales, el fondo se expandirá y generará más líneas.

Una cosa que no me trato es cómo va a manejar el desplazamiento.

He aquí un ejemplo:

<Grid> 
    <Grid.Resources> 
     <VisualBrush x:Key="StripesBrush" TileMode="Tile" Viewport="0,0,5,20" 
       Viewbox="0,0,10,10" ViewportUnits="Absolute" 
       ViewboxUnits="Absolute"> 
      <VisualBrush.Visual> 
       <Line X1="0" X2="10000" Y1="0" Y2="0" Stroke="DarkGray"/> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Grid.Resources> 
    <DataGrid x:Name="g" AutoGenerateColumns="False" 
       GridLinesVisibility="None" 
       MinHeight="100" 
       Height="100" 
       VerticalAlignment="Top" 
       Background="{StaticResource StripesBrush}"> 

     <DataGrid.Columns> 
      <DataGridTextColumn Header="A" Width="Auto" Binding="{Binding Item1}"> 
       <DataGridTextColumn.CellStyle> 
        <Style TargetType="DataGridCell"> 
         <Setter Property="Background" Value="Transparent"></Setter> 
        </Style> 
       </DataGridTextColumn.CellStyle> 
      </DataGridTextColumn> 
      <DataGridTextColumn Header="B" Width="Auto" Binding="{Binding Item2}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

+0

+1 Buen enfoque, pero se ve muy falso en comparación con una cuadrícula de datos real . También faltan las líneas de columnas. – SpeziFish

+0

@SpeziFish Saludos, es una forma rápida y desagradable de hacer las cosas. –

0

si es sólo por el diseño, sólo tiene que añadir una segunda cuadrícula de datos con 10 filas vacías debajo de la cuadrícula de datos real. o toma el enfoque Dmitry publicado y utiliza el pincel visual

+0

+1 Buena idea, pero demasiada sobrecarga, creo que – SpeziFish

+0

pero no tienes que manipular tus datos reales y todo se puede hacer en xaml;) – blindmeis

Cuestiones relacionadas