Bonjour,

J'avais avec Ria july09 créé un autocompletebox qui permettait d'aider un utilisateur à sélectionner un code postal et sa ville associée parmi près de cinquante mille code postaux et ce en ne chargeant jamais que quelques dizaines de codes dans mon autocompletebox.

Pour ce faire j'ai créé un DomainDataSource basé sur un query qui a comme paramètre mon autocompleteBox:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
  <!--RIA - CodePostal-->
        <riaControls:DomainDataSource x:Name="CodePostalDS" LoadSize="24" QueryName="GetCodesPostauxStartingWithQuery"  AutoLoad="True" LoadedData="CodePostalDS_LoadedData" Margin="0,0,152,0">
 
            <riaControls:DomainDataSource.DomainContext>
                <MonProjetWeb:xxx_Context/>
            </riaControls:DomainDataSource.DomainContext>
 
            <riaControls:DomainDataSource.QueryParameters>
                <riadata:ControlParameter ParameterName="parCodeStart" ControlName="acbZip" PropertyName="Text" RefreshEventName="TextChanged" />
            </riaControls:DomainDataSource.QueryParameters>
 
 
        </riaControls:DomainDataSource>
et donc mon autocompleteBox ressemble à ceci:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<input:AutoCompleteBox 
                	x:Name="acbZip"                           
                	ItemsSource="{Binding Data, ElementName=CodePostalDS}"
                	ValueMemberBinding="{Binding CodePostalCode}"
                	KeyUp="acbZip_KeyUp"
                	Grid.Column="1"
 
                	>
Dès que je tape un chiffre dans acbZip, le fait qu'acbZip soit mon paramètre, la fonction suivante est exécutée:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Function GetCodesPostauxStartingWith(ByVal parCodeStart As String, ByVal parCountryId As Integer) As IQueryable(Of CodePostalTbl)
 
        If Trim(Len(parCodeStart)) < 3 Then Return Nothing
 
        Dim aaa As IQueryable(Of CodePostalTbl)
 
        aaa = From mycp In Me.Context.CodePostalTbl _
        Where mycp.CodePostalCode.StartsWith(parCodeStart) _
        And mycp.CountryTbl.CountryID = parCountryId _
        Select mycp
 
        Return aaa
    End Function
l'astuce est que dans mon query, je n'interroge la base de données que quand j'ai tapé au moins 3 chiffres ce qui limite à un maximum de 50 codes postaux la liste affichée dans l'autocomplete et que le temps de réponse est donc très court.
L'avantage, c'est qu'en tapant par exemple 691, il commence à chercher mais rien n'empêche de taper (même pendant le chargement un chiffre supplémentaire ex 6911 ce qui a pour effet de relancer immédiatement une recherche plus affinée.

Ca marche donc super bien sans aucunes erreurs de chargement.

Le hic, c'est quand j'ai tenté de convertir ce code vers RIA PDC, j'ai maintenant des erreurs de type:
QueryParameters cannot be changed when Autoload is true and CanLoad is false
Une recherche sur google m'a tout de suite ramené deux articles sans réponses...

Je peux bien mettre mon autoload="False" mais alors l'autocompleteBox ne propose plus de liste déroulante, je peux aussi tester dans le code vb si "codePostalDS.canload" est à false mais ça n'empêchera pas l'erreur de ce produire puisque dès que je tape un caractère dans mon autocompleteBox, mon paramètre étant modifié, le query est relancé.

Quelqu'un a-t'il une idée de comment retrouvé un fonctionnement semblable à celui de RIA July 09 ?