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:
et donc mon autocompleteBox ressemble à ceci:
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>
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 <input:AutoCompleteBox x:Name="acbZip" ItemsSource="{Binding Data, ElementName=CodePostalDS}" ValueMemberBinding="{Binding CodePostalCode}" KeyUp="acbZip_KeyUp" Grid.Column="1" >
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.
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'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:
Une recherche sur google m'a tout de suite ramené deux articles sans réponses...QueryParameters cannot be changed when Autoload is true and CanLoad is false
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 ?
Partager