IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Datagrid dans une combobox


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Par défaut Datagrid dans une combobox
    Bonjour,

    J'ai une datagrid qui se trouve dans un template d'une combobox (dans le popup)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <Popup x:Name="PART_Popup" AllowsTransparency="True" Grid.ColumnSpan="2" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Margin="1" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom">
    	<Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=MainGrid}" Height="247" Width="337">
    		<Border x:Name="DropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" Margin="0" HorizontalAlignment="Stretch" Width="Auto" Height="Auto" VerticalAlignment="Stretch">
    			<ScrollViewer x:Name="DropDownScrollViewer" Margin="-1" d:LayoutOverrides="VerticalAlignment">
    				<Grid RenderOptions.ClearTypeHint="Enabled" Background="White" Height="Auto" Width="Auto" HorizontalAlignment="Stretch">
    					<DataGrid x:Name="dtg_loc" Margin="0,29,0,0" Height="218" VerticalAlignment="Top" HorizontalAlignment="Left" Width="337" AutoGenerateColumns="False" 
    						ItemsSource="{TemplateBinding ItemsSource}" 
    						SelectedItem="{TemplateBinding SelectedItem}" 
    						SelectionChanged="dtg_loc_SelectionChanged" 
    						>
    						<DataGrid.Columns>
    							<DataGridTextColumn Binding="{Binding NIdLocalite}" Header="nIdLocalite" Visibility="Hidden" />
    							<DataGridTextColumn Binding="{Binding SCP}" Header="Code Postal" />
    							<DataGridTextColumn Binding="{Binding SLocalite}" Header="Localite" Width="200" />
    							<DataGridTextColumn Binding="{Binding Deal.SNom}" Header="Code Dealer" />                           
    						</DataGrid.Columns>
    					</DataGrid>
    				</Grid>
    			</ScrollViewer>
    		</Border>
    	</Microsoft_Windows_Themes:SystemDropShadowChrome>
    </Popup>
    Le selecteditem est lié au template parent (donc la combobox) et a la combobox, j'ai bien lié le selecteditem à cette propriété:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Localite selectedLoc;
    public Localite SelectedLoc
    {
    	get { return selectedLoc; }
    	set
    	{
    		selectedLoc = value;
    		RaisePropertyChanged("SelectedLoc");;
     
    	}
    }
    Quand je lance l'application, il me trouve bien la ligne, on voit bien qu'il la trouvée, mais il ne la sélectionne pas
    Quand je sélectionne une autre ligne dans une autre datagrid qui déclenche la propriété SelectedLoc, la ligne est sélectionnée comme il faut ...



    J4ai essayer la même datagrid en dehors d'un template, ca marche au poils.
    Auriez-vous une idée?

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour draco951

    Normal.....
    J'ai comme l'impression que tu as mal compris le ControlTemplate du Combo
    et que tu as voulu "puller" un ItemTemplate à la place de l' ItemsPanel(un stackpanel par defaut pour tous les itemscontrol):
    Le ControlTemplate du Combo dispose d'un setter pour specifier son ItemTemplate...

    le model de control du combo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
     
    <Window x:Class="WpfFindName.Window2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:local="clr-namespace:WpfFindName"
            Title="Window2" Height="300" Width="300">
        <Window.Resources>
            <local:ListMyClass x:Key="mydatasource"></local:ListMyClass>
     
     <ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition Width="20" />
                    </Grid.ColumnDefinitions>
                    <Border
                      x:Name="Border" 
                      Grid.ColumnSpan="2"
                      CornerRadius="2"
                      Background="{StaticResource NormalBrush}"
                      BorderBrush="{StaticResource NormalBorderBrush}"
                      BorderThickness="1" />
                    <Border 
                      Grid.Column="0"
                      CornerRadius="2,0,0,2" 
                      Margin="1" 
                      Background="{StaticResource WindowBackgroundBrush}" 
                      BorderBrush="{StaticResource NormalBorderBrush}"
                      BorderThickness="0,0,1,0" />
                    <Path 
                      x:Name="Arrow"
                      Grid.Column="1"     
                      Fill="{StaticResource GlyphBrush}"
                      HorizontalAlignment="Center"
                      VerticalAlignment="Center"
                      Data="M 0 0 L 4 4 L 8 0 Z"/>
                </Grid>
                <ControlTemplate.Triggers>
                        <!--etc-->                   
                </ControlTemplate.Triggers>
            </ControlTemplate>
     
            <ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox">
                <Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" />
            </ControlTemplate>
     
            <Style x:Key="StyleCombo" TargetType="ComboBox">
                <!---etc ...setters d'apparence-->
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ComboBox">
                            <Grid>
                                <ToggleButton 
                                    Name="ToggleButton" 
                                    Template="{StaticResource ComboBoxToggleButton}" 
                                    Grid.Column="2" 
                                    Focusable="false"
                                    IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"
                                    ClickMode="Press">
                                </ToggleButton>
                                <ContentPresenter
                                    Name="ContentSite"
                                    IsHitTestVisible="False" 
                                    Content="{TemplateBinding SelectionBoxItem}"
                                    ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                                    ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                                    Margin="3,3,23,3"
                                    VerticalAlignment="Center"
                                    HorizontalAlignment="Left" />
                                <TextBox x:Name="PART_EditableTextBox"
                                    Style="{x:Null}" 
                                    Template="{StaticResource ComboBoxTextBox}" 
                                    HorizontalAlignment="Left" 
                                    VerticalAlignment="Center" 
                                    Margin="3,3,23,3"
                                    Focusable="True" 
                                    Background="Transparent"
                                    Visibility="Hidden"
                                    IsReadOnly="{TemplateBinding IsReadOnly}"/>
                                <Popup 
                                    Name="Popup"
                                    Placement="Bottom"
                                    IsOpen="{TemplateBinding IsDropDownOpen}"
                                    AllowsTransparency="True" 
                                    Focusable="False"
                                    PopupAnimation="Slide">
                                    <Grid 
                                          Name="DropDown"
                                          SnapsToDevicePixels="True"                
                                          MinWidth="{TemplateBinding ActualWidth}"
                                          MaxHeight="{TemplateBinding MaxDropDownHeight}">
                                        <Border 
                                            x:Name="DropDownBorder"
                                            Background="{StaticResource WindowBackgroundBrush}"
                                            BorderThickness="1"
                                            BorderBrush="{StaticResource SolidBorderBrush}"/>
                                        <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                            <!--ici le panel ou viendront se placer les items de l'itemtemplate -->
                                            <!--itemtemplate peut etre tout ce que tu veux -->
                                            <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                                        </ScrollViewer>
                                    </Grid>
                                </Popup>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <!---etc...-->
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <!---dans son ItemTemplate on peut mettre tout:un dgv,un aute listbox .....-->
                <Setter Property="ItemTemplate"    >
                    <Setter.Value>
                        <DataTemplate >
                            <Grid  Background="White" Height="Auto" Width="Auto" HorizontalAlignment="Stretch">
                                <DataGrid 
                                    Name="dtg_loc" Margin="0,29,0,0" Height="218" 
                                    VerticalAlignment="Top" HorizontalAlignment="Left" 
                                    Width="337" AutoGenerateColumns="False" 
                                    ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=ItemsSource}"
                                    SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=SelectedItem}" 
    						        >
                                    <DataGrid.Columns>
                                        <DataGridTextColumn
                                             Binding="{Binding SelectedLoc}" 
                                             Header="Localite"
                                             Visibility="Visible"  />
                                        <DataGridTextColumn 
                                            Binding="{Binding Name}" 
                                            Header="Name" />
                                    </DataGrid.Columns>
                                </DataGrid>
                            </Grid>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
     
        </Window.Resources>
        <StackPanel>
            <ComboBox x:Name="cbo"
                      IsSynchronizedWithCurrentItem="True"
                      SelectedValuePath="SelectedLoc"
                      Style="{StaticResource StyleCombo}"
                      ItemsSource="{StaticResource mydatasource}">
            </ComboBox>
            <TextBlock 
                FontSize="16"
                FontStyle="Italic"
                FontWeight="Black"
                Text="{Binding ElementName=cbo, Path=SelectedValue}">
     
            </TextBlock>
        </StackPanel>
    </Window>
    bon code...

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Par défaut
    Bonjour Mabrouki,

    J'ai essayé un peu ce que tu m'a montré.

    En faisant comme tu montre, Je vais me retrouver avec plusieur datagrid dans mon combobox non ?

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    re

    C'est ce que tu as fait autrement mais qui a l'inconvenient de ne pas marcher...

    Dans tous les cas combo est un itemscontrol ,et mettre dans son popup un autre itemscontrol(le dgv) soit directement ,soit dans itemtemplate est ...
    totalement saugrenu...mais je n'ai pas voulu le faire observer tout au debut pour mieux te faire comprendre le probleme....

    La seule exception ou c'est permis c'est le treeview, qui contient dans itemplate ...lui-meme(un itemscontrol) mais l'explication c'est qu'il gere des modeles de data hierarchique....

    bon code.....

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur C#
    Inscrit en
    Avril 2011
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur C#
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 348
    Par défaut
    Merci de m'avoir fais chercher pour rien

    Non je plaisante, au moins tu m'a ouvert les yeux et je t'en remercie :-)

    J'ai décider de créer un control moi même finalement :-)

    Un toggle button auquel j'associe ce fameux pop-up dans lequel se trouve ma datagrid. Jusque la, ca a l'air de fonctionner :-)

    En espérant que mon illumination ai pu aider quelqu'un

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. Comment afficher dans une combobox les driver des imprimante
    Par lassad dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/10/2005, 08h56
  3. ajouter une valeur dans une combobox
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2005, 10h58
  4. Réponses: 2
    Dernier message: 14/09/2005, 13h39
  5. [VB+IE] Comment sélectionner dans une combobox d'une page IE
    Par danje dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 03/05/2005, 09h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo