2011-01-04 6 views
4

J'ai un formulaire (formulaire1) qui contient une liste déroulante simple (dropdown1) et 2 zones de texte (textbox1) et (textbox2). Le scénario est le suivant: l'utilisateur entre du code dans textbox1, puis, en fonction de ce qu'il a entré, "type" du code apparaîtra dans textbox2. Je devrais dire que textbox2 est en lecture seule..net: Conditions codées en dur ou QUOI?

La partie principale du scénario est que seulement si textbox2.text est égal à certaines valeurs spécifiques (type) comme "Polymeric, Cord and Seat", le dropdown1 devrait être apparu dans form1 et rempli de quelques couleurs -get from DB -

Pensez-vous que coder en dur cette condition est une bonne décision? Si non, quelles sont vos suggestions?

+1

Que voulez-vous dire par «type» du code? Voulez-vous dire le type d'un objet dans le code? –

+0

Non, je veux dire Polymère, Siège, Cordon Ce que j'ai dit dans mon sujet ci-dessus – odiseh

+0

Nono, pas codé en dur. Faire un fichier de configuration simple, de sorte que vous pouvez ajouter/modifier/supprimer des types facilement sans toucher le code. – InsertNickHere

Répondre

0

Le codage en dur n'est jamais bon si tout ce que vous êtes en train de coder est sujet à changement.

Par exemple, vous devez ajouter un nouveau type et vous devez tout reconstruire.

Ma suggestion: rendre le mappage entre les codes et les types configurable si vous le pouvez.

+0

Voulez-vous dire que je devrais le faire dans une base de données? – odiseh

+0

c'est une possibilité, stocker quelques paramètres de configuration dans un DB, certainement mieux que le codage en dur. L'alternative est un fichier de configuration, mais cela dépend vraiment de la quantité de données. Si c'est un montant sérieux, alors db. – JohnIdol

0

Les règles de codage en dur comme ça ne sont jamais une bonne chose.

Je voudrais créer une classe similaire à

class Something 
{ 
    public string Keyword; 
    public string KeywordType; 
    public List<string> ListOfItems; 
} 

Alors je remplir une liste de quelque chose est à partir d'une base de données, un fichier xml ou toute autre chose, il ne marche pas quoi qu'il arrive.

public List<Something> ListOfSomethings; 

de lire votre magasin de données et de les ajouter à la liste.

ListOfSomethings.Add(new Something("keyword","KeywordType",new List<String>{"Item1","Item2"}); 

Puis, quand ils tapent quelque chose dans textbox1, vous pouvez LINQ ou en boucle les ListOfSomethings pour trouver l'élément dont vous avez besoin, et mettre TextBox2 à Something.KeywordType puis si le nombre de Something.ListOfItems> 0 puis ajoutez les éléments à la liste déroulante et le rendre visible.

0

Il est tout au sujet de la complexité finale de votre projet ... si c'est un projet de 2 pages, il n'y a rien de mal à codés en dur aussi longtemps qu'il est une seule fois et il est dans un endroit accessible à modifier non seulement par vous mais pour tous ceux qui prennent ce projet dans le futur.

par exemple, dans votre classe d'aide ajouter

public const string[] SearchTypes = new string[] { "polymeric", "cord", "seat" }; 

ajouter une méthode d'extension pour vous aider à

public static string ToJavaScriptArray(this string[] array) { 
    string r = ""; 

    foreach(string s in array) 
     r += String.Format("'{0}',", s); 

    return r.TrimEnd(','); 
} 

puis, dans votre javascript cette page particulière que vous voulez, vous pouvez ajouter facilement

var searchTypes = new Array(<%= SearchTypes.ToJavaScriptArray() %>); 

et d'utiliser le j tableau avascript dans votre code pour vérifier si le « type » est contenu dans ce tableau, comme

ajoutons un prototype pour nous aider

Array.prototype.has = function(obj) { 
    return this.indexOf(obj) >= 0; 
} 

puis

if(searchTypes.has(document.getElementById('textBox1').value) { 
    // show dropdown   
} 

espère que cela aide.

0

En supposant que le vous déjà la logique qui détermine le type de code dans textbox1, la zone de liste peut être activé comme:

d'abord définir une énumération des types de code,


enum CodeType 
{ 
    Polymeric, 
    Cord, 
    Seat 
} 

Ensuite, activez/désactiver la zone de liste,


public void test() 
{ 
    if (Enum.IsDefined(typeof(CodeType), textBox2.Text.Trim())) 
    { 
     listBox1.Enabled = true; 
    } 
    else 
    { 
     listBox1.Enabled = false; 
    } 

    //Alternative 
    //listBox1.Enabled = Enum.IsDefined(typeof(CodeType), textBox2.Text.Trim()); 
} 

Notez que si la zone de liste est caché plus tôt, alors vous devez modifier la propriété visible plutôt que la propriété Enabled e e listbox.

Si vous voulez éviter cela, vous pouvez déplacer les noms de types dans un fichier de paramètres et les lire au moment de l'exécution.

0

Comme d'autres l'ont dit, le codage dur n'est jamais une bonne idée. Vous avez mentionné que vous accédez à une base de données pour les couleurs, pourquoi ne pas avoir une table de recherche simple dans la base de données pour les mappages de code/type? Bien que ce soit probablement la solution la plus complexe, elle est la plus robuste pour un certain nombre de raisons.

Si vous n'avez qu'un seul serveur Web et que vous n'avez pas à vous soucier de la réplication de données, vous pouvez simplement implémenter les mappages dans un fichier XML et mettre le fichier en mémoire cache par expiration.

Questions connexes