Frage

ich brauche Textfelder dynamisch zu erstellen, wie Benutzer die no..actually gibt es zwei Textfelder in einem row..user gibt an keine der Zeilen benötigt .. wie angegeben Textfelder (zwei pro Zeile) sollte auf dem Formular hinzugefügt werden und auch ich brauche später den Text eingegeben lesen .... was die beste Methode ist ??

War es hilfreich?

Lösung

Wenn die Anzahl der Textfelder konstant ist, sondern die Anzahl der Zeilen ist dynamisch, dann einen Gridview verwenden. Dann bindet die Grid zu einer Liste oder eine Anordnung von der Länge, die der Benutzer spezifiziert. Die Gridview wird dann die angegebenen Zeilen machen, und Sie können die Werte aus den Textfeldern auf Postbacks erhalten.

Andere Tipps

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

Weitere Informationen:

  • „Control“ wird offensichtlich die Eltern die Kontrolle über, wo die Textfelder in Ihrem Fall gehen, z.B. eine Kontrolle.
  • Sie müssen die Steuerelemente hinzufügen auf Create oder auf Page_Init so dass sie an der richtigen Stelle hinzugefügt auf der Seite Lebensdauer.

So fügen Sie Steuerelemente zu einer aspx Seite dynamisch, gehen Sie folgendermaßen vor.

Fügen Sie zunächst einen Platzhalter auf der ASPX-Seite:

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

Meins "AssessCanvas" genannt. Als nächstes fügen Sie die Steuerelemente selbst. Hier ist der Code, dass ich in Methoden von Page_Load genannt verwenden, um ein Etikett und ein Textfeld zu erstellen. Das Label ist eine Aufforderung für „Gewicht“ und das Textfeld verwendet wird, einen Gewichtswert eingeben (im Beispiel, ich bin auch ein Wert für das Gewicht auch wenn ich die Box erstellen):

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);

Ich verwende „WSLabelN“ (wobei N eine Zahl ist) eine eindeutige ID zu jedem Etikett zu geben. Weil ich will, werde alle meine Textfelder scannen, um ihren Inhalt zu ziehen, wenn das Formular abgeschickt wird, gebe ich jedem von ihnen eine ID des Formulars „XTestN“ (wobei N eine eindeutige Kennung für jedes Feld ist - hier die „XTEST1 "sagt mir, dass dies das Gewicht Feld).

Als ich bin bereit, das Formular zu handhaben, ich dies tun:

// 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...
         }
     }
}

In meinem System, ich habe oft mehrere Felder auf der Seite zu sammeln Werte für einen Testgegenstand platzieren (das System hier kommt von einer Fitness-Prüfung Seite). Zum Beispiel: „SaveJP3P1“ oben ist nicht wie dargestellt genannt, weil es tatsächlich Daten von zieht neun verschiedenen Bereichen. Ich vereinfacht es für das Beispiel aus offensichtlichen Gründen.

Dieser Ansatz gibt Ihnen ein groß Maß an Flexibilität. In meiner ganzen Seite, ich habe Check-Box, Kopf Etikett (zum Beispiel ein Etikett mit HTML / CSS-Formatierung neben dem Label-Text) und sogar mehrere DIVS für Fitness-Tests mit mehreren Platten für ihren Einsatz. Und alle es wird dynamisch durchgeführt. Offensichtlich würde ein Gitter nicht funktionieren und weder würde das Hinzufügen nur eine Kontrolle mit dem Steuerbaum als andere vorgeschlagen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top