2011-01-14 25 views

Respuesta

4

Finalmente puedo encontrar el camino.

  1. Cuando la rejilla en vacío, añadir una fila por defecto en la red
  2. Crear una RowDetailTemplate que contienen un bloque de texto con un mensaje "Ningún registro encontrado"

    <DataGrid.RowDetailsTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="No Record Found" Width="400"></TextBlock> 
         </StackPanel> 
        </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
    
  3. establecer el estilo de cuadrícula de datos

    <DataGrid.Style> 
        <Style TargetType="DataGrid"> 
         <Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding DataContext.IsRecordExists, 
                RelativeSource={RelativeSource Mode=FindAncestor, 
                AncestorType={x:Type local:MainWindow}}}" Value="false"> 
           <Setter Property="RowHeight" Value="0"></Setter> 
           <Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
    </DataGrid.Style> 
    

Por la plantilla de detalles de la fila predeterminada (registro disponible en la cuadrícula de datos) se colapsará.

DataTrigger que comprueba la propiedad de CLR, si es falsa, entonces muestra la plantilla de detalles de la fila.

El motivo de establecer rowheight como 0 para ocultar la fila predeterminada que hemos agregado en el 1er paso.

+0

Quiero lo mismo pero en silverlight.Pero no es compatible con Silverlight :(... Cualquier alternativa? –

+0

También estoy buscando la misma funcionalidad pero en el código anterior AncestorType = {x: escriba local : MainWindow}}}, obtengo el error "Type local: MainWindow not found", qué tipo de antecesor necesito ubicar allí – Surya

5

Me parece que es fácil centrar un bloque de texto en la cuadrícula y establecer su visibilidad en función del número de filas. Estoy por lo general usando MVVM y se une a la visibilidad a una propiedad Ver Modelo:

<Grid> 
    <toolkit:DataGrid> 
     <toolkit:DataGrid.Columns> 
      . 
      . 
      . 
     </toolkit:DataGrid.Columns> 
    </toolkit:DataGrid> 
    <TextBlock Text="No Records Found" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding EmptyMessageVisibility, Mode=OneWay, FallbackValue=Visible}" /> 
</Grid> 
+0

Puede resolver el propósito, pero mi requisito era mostrar el mensaje en la cuadrícula (antes del pie de página de la grilla) significa mensaje se mostrará como una fila en la cuadrícula – pchajer

11

Su sido un largo tiempo desde la pregunta ha sido publicado. Pero pensé que esto podría ser útil para otra persona.

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 
</Window.Resources> 

<DataGrid Name="dgProjects" ItemsSource="{Binding Projects}" AutoGenerateColumns="True" /> 

<TextBlock Text="Employee has no projects" Visibility="{Binding Items.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=dgProjects}" /> 

con fines simplicidad he puesto AutoGenerateColumns = "true". Por favor, define las columnas. De esta forma, cuando se vincula un origen de datos vacío, los nombres de las columnas se mostrarán junto con el mensaje 'Vaciar fila'.

+1

Si no desea conservar los encabezados, creo que esta es la mejor solución. –

+0

Esta es la solución más práctica y simple. ¡Gracias! – gbdavid

Cuestiones relacionadas