2010-10-13 17 views
0

J'ai deux boîtes cfselect qui utilisent des liaisons et un cfc. L'un est l'État. Choisissez un état, et le second cfselect (comtés) est peuplé à la volée. Avant de faire cela avec l'attribut bind, j'ai utilisé l'attribut queryPostion = "below" comme ci-dessous pour mettre une ligne vide dans la case d'option. Je veux faire la même chose pour les boîtes de sélection d'état et de comté maintenant, comme j'aimerais avoir des valeurs "" (ou une valeur "ALL" en tant qu'option dans chacune.) Mais queryPostion ne fonctionne plus. pas sûr d'un travail autourColdFusion & Ajax: Comment obtenir une ligne vide dans une zone de sélection liée?

//original... leaves a blank option: 
    <cfselect enabled="No" name="search_state" multiple="no" query="get_States" value="StateUSAbb" display="StateName" queryPosition="below"> 
         <option></option> 
    </cfselect> 

    //now, w/bind, doesn't work: 


    <cfselect bind="cfc:states.getStates()" bindonload="true" name="search_state" 
        value="StateUSAbb" display="StateName">  
    </cfselect> 

    <cfselect bind="cfc:states.getCounties({search_state})" bindonload="true" name="search_county" value="FIPS_County" display="CountyName" > 
    </cfselect> 

MISE à JOUR Solution pour les deux requêtes.

 SELECT DISTINCT tblLoc.StateUSAbb, lkuState.StateName 
     FROM lkuState INNER JOIN tblLoc ON lkuState.FIPS_State = tblLoc.FIPS_State 
     WHERE (lkuState.StateName <> 'New Brunswick') 
     UNION 
     SELECT '' AS StateUSAbb, '' AS StateName 
     FROM lkuState 
     ORDER BY StateName 

SELECT '' AS FIPS_COUNTY, '' as CountyName 
     FROM lkuCnty 
     UNION 
     SELECT FIPS_County, CountyName 
     FROM lkuCnty 
     WHERE StateAbb = '#ARGUMENTS.stateabb#' 
     ORDER BY CountyName 
+0

@stuttsdc - Avez-vous d'abord exécuté les 2 versions de la requête "data" par elles-mêmes? ie Vérifier que le sql fonctionne en premier – Leigh

+0

@Leigh ... Essayer. Je suis à peu près sûr que c'est un problème de sytaxe avec mon SQL. Lorsque j'essaie d'exécuter sql pour la zone 'states', j'obtiens une erreur: "L'instruction SELECT inclut un mot réservé ou un nom d'argument mal orthographié ou manquant, ou la ponctuation est incorrecte." – stuttsdc

+0

@stuttsdc - Essayez une seule fois à la fois pour pouvoir identifier l'objet du problème. Exécutez le JOIN de base dans MySQL. Si cela fonctionne, rajoutez d'autres pièces (clause ORDER BY, puis UNION). – Leigh

Répondre

0

MISE À JOUR: Peu importe. On dirait que la même chose a déjà été suggérée pendant que je répondais ;-)

AFAIK, il n'y a pas d'option intégrée pour créer des éléments vides dans la liste de sélection liée. Du moins pas avec CF8.

Étant donné que la liaison remplacera le contenu de la liste, vous devrez ajouter les options vides aux résultats de votre requête. Une technique consiste à ajouter l'option vide aux résultats de votre requête via UNION.

En fonction des valeurs de la liste, soit

SELECT 0 AS SortOrder, '' AS StateUSAbb, '--- ALL ---' AS StateName 
UNION ALL 
SELECT 1, StateUSAbb, StateName 
FROM YourTable 
WHERE (some condition ...) 
ORDER BY SortOrder ASC 

... Ou peut-être

SELECT '' AS StateUSAbb, '--- ALL ---' AS StateName 
UNION ALL 
SELECT StateUSAbb, StateName 
FROM YourTable 
WHERE (some condition ...) 
ORDER BY StateUSAbb 

MISE À JOUR En tant que point d'intérêt, la différence entre l'utilisation UNION et UNION ALL est que UNION supprime les doublons. UNION ALL ne le fait pas. Comme une requête UNION est légèrement plus chère, je ne l'utilise qu'en cas de besoin.


+0

Merci les gars .. c'est là que je me dirigeais mais je n'arrive pas à le faire cliquer. – stuttsdc

2

La meilleure façon que j'ai compris est d'insérer un blanc (ou espace réservé) ligne de données dans la requête dans votre cfc Quelque chose comme:

select "0" as id, "Choose...." as value 
union 
select id, value from tableName 
1

Ceci serait géré dans la fonction states.cfc getCounties(). Cela doit retourner l'enregistrement vide. Postez-le ici si vous voulez plus d'aide.

+0

Va poster tout cfc ci-dessus, merci – stuttsdc

0

L'expression de liaison FYI peut se lier à des fonctions qui retournent un tableau d'entités dans CF9.

Dans ce cas, ArrayPrepend() fonctionnera de la même manière que QoQ avec UNION ALL.

+0

Qu'entendez-vous par entités? Est-ce différent des versions précédentes lorsque vous ne pouviez utiliser qu'un tableau, pas une requête? – Leigh

+0

Lorsque vous le liez à une méthode cfc, cette méthode peut renvoyer un tableau Entity (persistence = true orm de CF9) et la plomberie AJAX fonctionnera toujours. – Henry

+0

Cool. Je ne le savais pas. – Leigh