Passage de RIA JulyO9 à RIA PDC et optimisation d'un autocompletebox
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:
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:
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:
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:
Citation:
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 ?