none
Definir Column Span desde un Style o Codigo Fuente RRS feed

  • Pregunta

  • Saludos a todos, tengo un DataGrid que se ve de la siguiente manera:

     

     

     

    Lo que necesito es en las filas que están con fondo gris, agrupar las columnas. Quisiera saber si lo puedo hacer en un style y aplicarselo a la fila o como lo podría hacer desde el CodeBehind?

     

    Muchas Gracias


    David Cardona
    Silverlight MCTS, .Net Developer
    Medellin, Colombia
    martes, 31 de mayo de 2011 21:19

Todas las respuestas

  • Saluds David,

    En principio, porque no lo he intentado, cada fila tiene un RowDetailsTemplate. De modo que podrías cambiar toda la fila por lo que quisieras y, como bien sabes, con un style se puede definir un template. Y, en teoría, todo lo que se hace en XAML se puede hacer en codebehind.


    Nestor Arturo Fernandez Ricaurte
    miércoles, 1 de junio de 2011 12:14
  • Hola Nestor, gracias por tu respuesta.

     

    En efecto un DataRow tiene la propiedad que mencionas, solo que no se como desde un Style hacer esto, pues el grid está ya definido con esas Columnas y estuve investigando y no encontré como desde un Style podrían agruparse.Sabrias como?

     

    Muchas Gracias


    David Cardona
    Silverlight MCTS, .Net Developer
    Medellin, Colombia
    miércoles, 1 de junio de 2011 12:28
  • Veo que estaba un poquito equivocado, confundí el RowDetailsTemplate con el RowTemplate... pero el ejercicio es más o menos el mismo:

    Este es mi XAML

    <Grid x:Name="LayoutRoot"
    			Background="White">
    	<Grid.Resources>
    		<Style x:Name="styFila"
    						TargetType="sdk:DataGridRow">
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate>
    						<StackPanel Orientation="Horizontal"
    												Background="LightGray">
    							<TextBlock Text="{Binding Nombre}" />
    							<TextBlock Text="{Binding Id, StringFormat='{}{0:(0)}'}"
    													Margin="10,0,0,0"
    													FontWeight="Bold" />
    						</StackPanel>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    	</Grid.Resources>
    	<sdk:DataGrid AutoGenerateColumns="True"
    								Margin="10"
    								LoadingRow="dataGrid1_LoadingRow"
    								Name="dataGrid1" />
    </Grid>
    

     

    y este es mi code behind:

    l class PruebaGrilla : UserControl
    {
    	public PruebaGrilla()
    	{
    		InitializeComponent();
    		this.Loaded += new RoutedEventHandler(PruebaGrilla_Loaded);
    	}
    
    	Style EstiloFila;
    	ControlTemplate TemplateFila;
    	List<Persona> Lista;
    
    	void PruebaGrilla_Loaded(object sender, RoutedEventArgs e)
    	{
    		Lista = new List<Persona>();
    		Lista.Add(new Persona() { Id = 1, Nombre = "Nestor" });
    		Lista.Add(new Persona() { Id = 2, Nombre = "Arturo" });
    		Lista.Add(new Persona() { Id = 3, Nombre = "Fernandez" });
    		Lista.Add(new Persona() { Id = 4, Nombre = "Ricaurte" });
    
    		dataGrid1.ItemsSource = Lista;
    		EstiloFila = LayoutRoot.Resources["styFila"] as Style;
    	}
    
    	private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
    	{
    		Persona P = Lista[e.Row.GetIndex()];
    
    		if (P.Id == 2)
    		{
    			e.Row.Style = EstiloFila;
    		}
    	}
    }
    
    public class Persona
    {
    	public int Id { get; set; }
    	public String Nombre { get; set; }
    }
    

     


    Nestor Arturo Fernandez Ricaurte
    miércoles, 1 de junio de 2011 18:57
  • Hola Nestor, eso está bien y me queda claro...sin embargo no se como podría mediante un Style unificar las columnas del grid, es decir definir un Style con un ColumSpan definido. Sabrias como ?

     

     


    David Cardona
    Silverlight MCTS, .Net Developer
    Medellin, Colombia
    miércoles, 1 de junio de 2011 20:25
  • Bueno... como creo que no existe algo tal como un ColumnSpan en el DataGrid (no estoy seguro), lo que yo haría para obtener algo como lo que muestras en la imagen es usar un StackPanel que acomode horizontalmente cada dato y, donde necesites mostrar un dato sobre otro dentro de dicha fila, poner un StackPanel vertical y en el los datos.

    Ah... en dicha fila ya no utilizarías los controles de la grilla, deberás mostrar los datos con tus propios textblock (o el control que desees).

    El trabajo de carpintería sería crear los controles con el mismo tamaño de las columnas para que cuadren verticalmente.


    Nestor Arturo Fernandez Ricaurte
    miércoles, 1 de junio de 2011 20:39
  • Hola Nestor,

     

    Recién puedo revisar tu respuesta. Muchas gracias...pareciera que técnicamente no es posible hacer esto o al menos no como tengo estructurado el grid.

     

    Muchas gracias igual


    David Cardona
    Silverlight MCTS, .Net Developer
    Medellin, Colombia
    martes, 7 de junio de 2011 15:13