productos predeterminado por ordenar orden novedades los destacados como catalogo cambiar alfabeticamente acomodar c# asp.net webforms treeview position

c# - predeterminado - ordenar productos woocommerce



¿Cómo puedo personalizar el orden/posición en la que se muestran TreeNodes en un TreeView? (1)

Tengo: datos padre-hijo con 4 niveles de jerarquía: 1 sistema, 2 subsistema, 3 unidades, 4 componentes
Mi problema (ver imagen): TreeView muestra un Componente, que se agrega al nodo raíz como Comp2. Mi objetivo: MOSTRAR todos los nodos en su "columna" correspondiente (por ejemplo, Comp3).
Intenté todas las sangrías, el espaciado y el relleno, pero nada funcionó.

¿Algunas ideas?


Puede usar una plantilla de elemento para los Nodos, darles un ancho y se mostrarán exactamente donde los desee.

Este código es para WPF, pero creo que no debería haber una gran diferencia:

Primero, proporcione un ItemTemplate para sus NodeViewModels, incluida una HierachicalDataTemplate

<TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type local:NodeViewModel}" ItemsSource="{Binding Children}"> <ContentPresenter x:Name="item" ContentTemplate="{StaticResource notSelectedItemTemplate}" /> <HierarchicalDataTemplate.Triggers> <DataTrigger Binding="{Binding IsSelected}" Value="True"> <Setter TargetName="item" Property="ContentTemplate" Value="{StaticResource selectedItemTemplate}" /> </DataTrigger> </HierarchicalDataTemplate.Triggers> </HierarchicalDataTemplate> </TreeView.ItemTemplate>

En segundo lugar, proporcione un DataTemplate para sus Nodos:

<DataTemplate x:Key="selectedItemTemplate" DataType="{x:Type local:NodeViewModel}"> <Grid Height="Auto" TextElement.Foreground="Black"> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="100"></ColumnDefinition> <ColumnDefinition Width="50"></ColumnDefinition> <ColumnDefinition Width="100"></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="{Binding Id}" HorizontalAlignment="Left"></TextBlock> <TextBlock Grid.Column="1" Text="----" HorizontalAlignment="Left"></TextBlock> <TextBlock Grid.Column="2" Text="{Binding Name}" HorizontalAlignment="Left"></TextBlock> </Grid> </DataTemplate>

Como puede ver, tenía dos plantillas de datos porque tenía una diferente para los nodos seleccionados. Para su caso, esto no debería ser necesario, así que simplemente ignore la "plantilla de elemento no seleccionado" y elimínela.