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 drag & drop qui ne marche qu'une seule fois


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Points : 59
    Points
    59
    Par défaut DataGrid drag & drop qui ne marche qu'une seule fois
    Bonjour,
    J'ai un datagrid auquel je donne un style pour les headers de colonne:
    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
    <Style x:Key="ColumnHeaderStyle" TargetType="{x:Type tk:DataGridColumnHeader}">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding}"  MouseMove="MouseMoveMethode" Background="Red" Width="100" Height="100"
                                           PreviewMouseLeftButtonDown="DataGridHeader_PreviewMouseLeftButtonDown"
                                           PreviewMouseMove="DataGridHeader_PreviewMouseMove" />
                            </StackPanel>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
     
    <DockPanel x:Name="xRegroupement" Grid.Row="0" Background="Aqua" AllowDrop="True" Drop="PanelRegroupement_Drop">
            </DockPanel>
     
    <DataGrid x:Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="False"
                                    ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}"
                                    >
    Dans le code, voici comment est "géré" la chose (pour l'instant j'essaye de faire que ça marche, le traitement n'est pas complet, loin de là):
    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
    private void DataGridHeader_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                _startPointGridHeader = e.GetPosition(null);
            }
     
     
            private void DataGridHeader_PreviewMouseMove(object sender, MouseEventArgs e)
            {
               if (e.LeftButton == MouseButtonState.Pressed && !IsDraggingGridHeader)
               {
                    Point position = e.GetPosition(null);
     
                    if (System.Math.Abs(position.X - _startPointGridHeader.X) > SystemParameters.MinimumHorizontalDragDistance ||
                        System.Math.Abs(position.Y - _startPointGridHeader.Y) > SystemParameters.MinimumVerticalDragDistance)
                    {
                        // Le sender est le TextBlock créé par le template appliqué aux headers de colonnes
                        IsDraggingGridHeader = true;
                        if (DragDrop.DoDragDrop(this.dg, ((TextBlock)sender).Text, DragDropEffects.Move) != DragDropEffects.None)
                        {
     
                        }
                        IsDraggingGridHeader = false;
                    }
                }
            }
     
            void PanelRegroupement_Drop(object sender, DragEventArgs e)
            {
                IDataObject data = e.Data;
     
                if (data.GetDataPresent(DataFormats.Text))
                {
                    xRegroupement.Children.Add(new TextBox { Text = ((string)data.GetData(DataFormats.Text)), Width=50, Height=50 } );
                } 
            }
    Mon problème est que, au lancement, je ne peux pas réordonner les colonnes du Grid par Drag & Drop, par contre je peux lancer MON Drag & Drop. Une fois celui-ci effectué une fois, je ne peux plus le relancer, par contre je peux réordonner les colonnes....
    Quelqu'un a-t-il une idée ou déjà mis ce genre de chose en place?

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    C'est vrai que les colonnes du DataGrid doivent déjà utiliser une forme de Drag & Drop pour le réordonnancement.

    As-tu essayé de le désactiver (CanUserReorderColumns="False") pour voir si ton Drag & Drop fonctionne plus d'une fois. (Cela ciblerait un peu plus le problème )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Points : 59
    Points
    59
    Par défaut
    Salut et merci de ton aide,
    Je viens de faire le test en passant le CanUserReorderColumns à false, mais j'ai toujours le même problème.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Points : 59
    Points
    59
    Par défaut
    Alors j'ai creusé un peu plus mon problème, en fait j'ai une "popup" (enfin un dérivé maison pour faire cours) qui sert de menu, lorsque celle-ci est au premier plan, mon drag and drop fonctionne mais dès que celle-ci est fermée, c'est celui par défaut qui fonctionne (celui permettant de réordonner les colonnes).
    Mais je ne comprends pas ce fonctionnement.....

Discussions similaires

  1. [XL-2010] Fonction qui ne marche qu'une seule fois
    Par haydens dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/07/2012, 10h04
  2. [JSTL] foreach qui ne fonctionne qu'une seule fois
    Par Ouguiya dans le forum Taglibs
    Réponses: 16
    Dernier message: 02/08/2007, 16h17
  3. [AJAX] [XMLHttp][IE]Fonction qui ne fonctionne qu'une seule fois
    Par narnou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/07/2007, 11h16
  4. Label qui ne change qu'une seule fois ...
    Par Christophe Charron dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/04/2006, 19h08
  5. fonction qui s'exécute qu'une seule fois sous Firefox
    Par la.sophe dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/03/2006, 10h02

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