Question

i besoin de créer dynamiquement textboxes utilisateur spécifie le no..actually il y a deux zones de texte dans un row..user spécifie pas de lignes nécessaires .. que deux zones de texte spécifiées (par ligne) devrait être ajouté à la forme et aussi je dois lire le texte entré plus tard .... quelle est la meilleure méthode ??

Était-ce utile?

La solution

Si le nombre de zones de texte est constant, mais le nombre de lignes est dynamique, puis utilisez un GridView. Ensuite, lier le gridview à une liste ou un tableau de la longueur que l'utilisateur spécifié. Le gridview ensuite rendre les lignes spécifiées et vous pouvez obtenir les valeurs des champs de saisie sur postback.

Autres conseils

Control.Controls.Add(new TextBox());

Notes:

  • « Control » sera évidemment le contrôle parent de l'endroit où les zones de texte vont dans votre cas, par exemple un contrôle.
  • Vous devrez ajouter les commandes CreateChildControls ou sur Page_Init ils sont ajoutés au bon moment dans la durée de vie de la page.

Pour ajouter des contrôles à une page ASPX dynamique, procédez comme suit.

D'abord, ajoutez un espace réservé sur la page ASPX:

<asp:PlaceHolder runat="server" id="AssessCanvas" />

Le mien est appelé "AssessCanvas". Ensuite, ajoutez les contrôles eux-mêmes. Voici le code que j'utilise des méthodes appelées par Page_Load pour créer une étiquette et une zone de texte. L'étiquette est une invite pour « Poids: » et la zone de texte permet d'entrer une valeur de poids (dans l'exemple, je suis également compte d'une valeur de poids lorsque je crée la boîte):

Label aLbl = new Label { Text = "Weight: ", ID = ("WSLabel" + counter) };
counter++;
AssessCanvas.Controls.Add(aLbl);

TextBox aBox = new TextBox { ID = "XTest1", Columns = 5, Text = weight.ToString("##0.0"), Width = 50 };
AssessCanvas.Controls.Add(aBox);

J'utilise « WSLabelN » (où N est un nombre) pour donner un identifiant unique à chaque étiquette. Parce que je vais à numériser toutes mes zones de texte pour tirer leur contenu lorsque le formulaire est soumis, je donne chacun d'eux une carte d'identité de la forme « XTestN » (où N est un identifiant unique pour chaque champ - ici le « XTest1 »me dit que c'est le champ de poids).

Quand je suis prêt à gérer le formulaire soumettre, je fais ceci:

// Look at each key submitted with the form - *some* of these will be my input text boxes
foreach (string aStr in form.AllKeys)
{
    // Is this an input text box?  Yes if it has "XTest" in it somewhere.
    int position = aStr.IndexOf("XTest");
    if (position > 0)
    {
        // The data entry fields for each input box follows the format: <ASP.NET Prefix>XTest<TID>
        // Here I get the tid so I know what to do with the value that was entered 
        short tid = BSDIUtil.StrToIntDef(aStr.Substring(position + 5));
        switch (tid)
        {
            case 1: SaveWeight(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            case 2: SaveJP3P1(BSDIUtil.StrToFloatDef(form.Get(aStr))); break;
            ... etc...
         }
     }
}

Dans mon système, je dois souvent placer plusieurs champs sur la page pour recueillir des valeurs pour un élément d'essai (le système est ici d'une page de test de conditionnement physique). Par exemple, « SaveJP3P1 » ci-dessus n'est pas appelé comme le montre parce qu'elle tire réellement les données de neuf différents champs. Je l'ai simplifié pour l'exemple pour des raisons évidentes.

Cette approche vous donne une grand souplesse. Dans ma pleine page, je check-boîtes, les étiquettes d'en-tête (par exemple une étiquette avec le formatage HTML / CSS en plus du texte de l'étiquette), et même plusieurs DIVS pour les tests de conditionnement physique avec plusieurs panneaux pour leur entrée. Et tous de celui-ci est fait dynamiquement. De toute évidence, une grille ne fonctionnerait pas et ne serait ni simple ajout d'un contrôle à l'arbre de commande comme d'autres l'ont suggéré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top