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 :

WPF affichage de données concaténées


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut WPF affichage de données concaténées
    Bonjour,

    Le problème est simple encore faut il connaitre le mécanisme à mettre en œuvre..

    J'ai un ID(numéro de machine) et d'autres données que j'affiche dans un tableau. Pour l'utilisateur, au lieu d'avoir un ID, il doit apparaitre un ID et un programme auquel il appartient...

    ainsi j'ai les classes :

    TaskProvider qui contient des propriété dont l'ID(numéro de machine) et TaskViewProvider,
    puis PrgHcProvider et PrgHcViewProvider (contient tous les programmes de tous les Hc),
    enfin PrgProvider et PrgViewProvider (contient tous les programmes)

    voici le code XamL :

    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
    <DataGrid.Columns>
    				<DataGridComboBoxColumn Header="Planning" SelectedValueBinding="{Binding Path=PLAN_ID}" ItemsSource="{Binding Source={StaticResource PlanningViewProvider},Path=Plannings}" DisplayMemberPath="PLN_NAME" SelectedValuePath="PLN_ID" CanUserReorder="True" />
     
    				<DataGridTemplateColumn Header="HC" Width="*" >
    					<DataGridTemplateColumn.CellTemplate>
    						<DataTemplate>                               
    								<TextBlock Width="48"  Height="22"  Text="{Binding HC_ID }"/>
    						</DataTemplate>
    					</DataGridTemplateColumn.CellTemplate>
    					<DataGridTemplateColumn.CellEditingTemplate>
    						<DataTemplate>
    							<TextBox Width="48"  Height="22"  Text="{Binding HC_ID}"/>
    						</DataTemplate>
    					</DataGridTemplateColumn.CellEditingTemplate >
    				</DataGridTemplateColumn>
    [...]
    Je bloque ...
    Merci d'avance !!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    J'ai pas tout compris, mais ce serait pas juste un MultiBinding qu'il te faut ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0} {1}">
                <Binding Path="Id" />
                <Binding Path="NomDuProgramme" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut
    oui! sauf que j'arrive pas à binder ma valeur

    Du coup je viens de faire ça :
    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
     
    <Page.Resources>
    		<ObjectDataProvider ObjectInstance="{StaticResource PrgHcViewProvider}" ObjectType="{x:Type static:PrgHcViewProvider}" x:Key="PrgNameFromHc" MethodName="PrgNameFromHc">
    			<ObjectDataProvider.MethodParameters>
    				<System:Int32>4</System:Int32>
    			</ObjectDataProvider.MethodParameters>
    		</ObjectDataProvider>
    </Page.Resources>
     
    						<DataTemplate>
    							<TextBlock>
    								<TextBlock.Text>
    									<MultiBinding StringFormat="{}{0} {1}">
    										<Binding Path="HC_ID" />
    										<Binding Source="{StaticResource PrgNameFromHc}" Path="MethodParameters[0]" BindsDirectlyToSource="true" UpdateSourceTrigger="PropertyChanged" />
    									</MultiBinding>
    								</TextBlock.Text>
    							</TextBlock>
    						</DataTemplate>
    j'ai comme erreur :

    La propriété Set 'System.Windows.Data.ObjectDataProvider.ObjectInstance' a levé une exception.
    Je pense que c'est pas un ObjectDataProvider l'Element que je dois appeler car ma classe est une ViewProvider mais du coup je sais pas quelle élément je dois appeler dans mon xamL pour instancier mon objet et faire appel à ma méthode "PrgNameFromHc" qui me retourne un string ...

    voici le code behind
    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
        class PrgHcViewProvider
        {
            private PrgHcProvider _PrgHcProvider = new PrgHcProvider();
            public ObservableCollection<PRG_HC> ProgHcs
            {
                get
                {
                    return _PrgHcProvider._PrgHcs;
                }
            }
            public string PrgNameFromHc(int i)
            {
                System.Windows.MessageBox.Show(_PrgHcProvider.PrgCollectionFromHc(i).ElementAt(5).PRG_NAME);
                return _PrgHcProvider.PrgCollectionFromHc(i).ElementAt(5).PRG_NAME;
            }
            public IEnumerable<T_ARBO_PRG> PrgNameFromHc()
            {
                return _PrgHcProvider.PrgCollectionFromHc();
            }
        }
    j'ai mis quelque élément en dur mais c'est pour simplifier car je bloque ...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par lerieure Voir le message
    La propriété Set 'System.Windows.Data.ObjectDataProvider.ObjectInstance' a levé une exception.
    Quelle est la InnerException ?


    Sinon je comprends pas trop ce que tu fais... pourquoi tu bindes sur le paramètre de la méthode du ObjectDataProvider ? C'est pas le paramètre qui t'intéresse, si ? Plutôt le résultat ?

    Et où est définie la ressource PrgHcViewProvider à laquelle tu fais référence ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut
    System.InvalidOperationException
    ObjectDataProvider ne peut se voir assigner qu'un ObjectType ou un ObjectInstance, pas les deux.
    à System.Windows.Data.ObjectDataProvider.set_ObjectInstance(Object value)
    et bien mon paramètre doit etre un Hc_ID (numero de la machine) la je m'ai mis en dur (<System:Int32>4</System:Int32>) car je ne sais pas donner le Hc_ID en fonction des enregistrement de mon tableau...

    Après en effet c'est plutôt le résultat qui m'intéresse afin que l'utilisateur est l'id et le programme de la machine en fonction donc de la machine

    Le but étant donc d'avoir au lieu de 4 avoir 4 - MonProgramme Name
    si c'était l' id 2 alors afficher 2- MonProgramme Name2


    voici la déclaration des ressoources :
    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
    	<Page.Resources>
    		<ObjectDataProvider x:Key="FalList" />
    		<CollectionViewSource x:Key="TaskViewSource" d:DesignSource="{d:DesignInstance staticData:TASK, CreateList=True}" />
    		<CollectionViewSource x:Key="FalViewSource" d:DesignSource="{d:DesignInstance staticData:T_ARBO_FAL, CreateList=True}" />
     
    		<static:FalViewProvider x:Key="FalViewProvider" />
    		<static:StationViewProvider x:Key="StationViewProvider" />
    		<static:PlanningViewProvider x:Key="PlanningViewProvider" />
    		<static:PrgHcViewProvider x:Key="PrgHcViewProvider" />
     
    		<ObjectDataProvider ObjectInstance="{StaticResource PrgHcViewProvider}" ObjectType="{x:Type static:PrgHcViewProvider}" x:Key="PrgNameFromHc" MethodName="PrgNameFromHc">
    			<ObjectDataProvider.MethodParameters>
    				<System:Int32>4</System:Int32>
    			</ObjectDataProvider.MethodParameters>
    		</ObjectDataProvider>
     
    	</Page.Resources>

    la piece jointe est du XamL (fichier complet)

    Donc c'est bien du MultiBinding comme tu le dis mais le deuxieme binding doit etre le nom du programme en fonction de mon HC_ID et PrgNameFromHc renvoit le nom du programme en fonction du paramètre qui est le HC_ID normalement mais il est vrai que dans le XamL c'est en dur car je sais pas faire autrement...
    au lieu de :
    <System:Int32>4</System:Int32>

    il faudrait un truc du genre <System:Int32>HC_ID</System:Int32>
    Mais je sais pas comment faire ...


    Merci pour tes interventions ca m'aide beaucoup !

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ah ok, je commence à comprendre...

    Tu ne peux pas passer un paramètre à un ObjectDataProvider via un binding. Utilise plutôt un converter, ou alors (plus simple), expose sur ton objet une propriété qui renvoie directement la valeur qui t'intéresse, déjà formattée. C'est beaucoup plus simple comme ça, tu n'auras même plus besoin du multibinding ni du ObjectDataProvider

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

Discussions similaires

  1. Affichage de données à concaténer
    Par mialy.rakot dans le forum Ext JS / Sencha
    Réponses: 10
    Dernier message: 12/11/2010, 15h40
  2. TDBCtrlGrid - Affichage des données
    Par audreyb dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/10/2004, 14h10
  3. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 18h07
  4. Affichage de données (histograme, graphe etc.)
    Par sunshine33 dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 13/01/2004, 15h16
  5. PB : affichage de données avec accent sous delphi 6
    Par kinda dans le forum Débuter
    Réponses: 3
    Dernier message: 03/07/2003, 14h19

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