2009-02-27 10 views
2

Freunde mit,, wie Werte von 100 Textfelder abrufen Schleife

Ich habe ein Raster von 100 oder mehr Textfelder (HTML oder ASP.NET), die jeweils einen Textwert fester Länge werden enthält, müssen diese ALL zurück an das Back-End-Formular für die Massenaktualisierung der Datenbank ..

Ich kann dies tun, indem Sie einfach durch jede der Steuerelemente. Text-Eigenschaft in Code hinter.

Allerdings macht das den Code zu groß und hässlich.

ich mich gefragt, ob es irgendeine warum durch jede Kontrolle gehen einige kontrollierte Schleifenstruktur mit und

dh

Private List<string> getdata() 
{ 
    Private List<String> MyList = new List<string>(); 
    foreach (Textbox)control txbControl in ....// don't know what this will be 
    { 
     MyList.Add(txbControl.text); 
    } 
} 

Bitte Daten abrufen beachten Sie, dass alle diese Textfelder auf die eindeutige ID-Tag Seite dh

<tablr> 
<tbody> 
<tr> 
<td> 
<asp:TextBox ID="TxB_Customize1" runat="server"></asp:TextBox> 
<td/> 
<td> 
<asp:TextBox ID="TxB_Customize2" runat="server"></asp:TextBox> 
<td/> 
<td> 
<asp:TextBox ID="TxB_Customize3" runat="server"></asp:TextBox> 

... ... ...

Leider vergessen, dies zu erwähnen, Textfelder sind in Spalten gruppiert und jedes Textfeld in einer bestimmten Spalte teilt ähnlichen Namen, d. H. "Txb_Customize" in der gegebenen Instanz.

Also beim Abrufen der Werte muss ich auch wissen woher es kommt (kann Textbox ID sein).

Antwort

1

oder Sie können wie etwas tun:

int index = 1; 
while ((TextBox tb 
    = FindControl (
     string.Concat ("TxB_Customize", index.ToString ()) as TextBox != null) 
{ 
    MyList.Add (tb.Text); 
    index++; 
} 

Das könnte gut sein, wenn Sie auch tatsächlich einige andere Textfelder haben, die nicht Teil dieser Reihe von Daten ist.

0

Sie könnten der Behälter Kontrollen durchlaufen (mit MyContainer.Controls), wenn alles, was Sie haben dort Textfelder ist es leicht sein wird, sonst müssen Sie vielleicht tun:

foreach (Control myBox in MyContainer.Controls) 
{ 
    TextBox myBox = Control As TextBox 
    if (myBox != null) 
     // Do Stuff 
} 
8

Blick auf die Control.Controls Eigentum.

Sie würden wollen, so etwas wie:

foreach (Control control in Controls) 
{ 
    TextBox textBox = control as TextBox; 
    // Ignore non-textboxes 
    if (textBox != null) 
    { 
     list.Add(textBox.Text); 
    } 
} 

Wenn Sie 3.5 verwenden sind .NET Sie mit LINQ in einer einfacheren Art und Weise tun könnte:

return Controls.OfType<TextBox>() 
       .Select(textBox => textBox.Text) 
       .ToList(); 
+0

verdammt ... die Linq-Lösung kam mir in den Sinn, nachdem ich gepostet habe ... –

+0

Diese LINQ Lösung ... wow! :) –

1

Sie können das tun in Javascript - Geben Sie ihnen einen Klassennamen und holen Sie sie alle in eine Sammlung und durchlaufen Sie die Sammlung und posten Sie dann die Werte einfach mit Ajax. JQuery kann hier sehr praktisch sein -.

$ ("yourclassname"), die jeweils (function (Index) { $ (this) .val() // dies wird der Wert Ihrer Textbox sein})

Sie können eine große Zeichenfolge Münze und auf der Serverseite analysieren oder Sie können einen Namen Wert Array erstellen und verwenden Sie dann, dass anstelle

+0

Hey Bharani ich bin nicht so femilier mit JQuery aber ich mag es, weil ich jede Möglichkeit haben riesige Menge von Java-Skript auf der Seite. können Sie bitte den "(Index)" Teil in Ihrer Antwort erklären. Wie bekomme ich es? oder es ist nur ein Platzhalter. Ich habe Ruhe gefunden. Dank –

+0

jede Funktion ist wie eine for-Schleife und der Index der Sammlung iteriert wird als Parameter an die Callback-Funktion übergeben. Wenn Sie innerhalb des Callbacks das eigentliche DOM-Element benötigen, können Sie dieses verwenden oder Sie können $ (this) verwenden, wenn Sie das jquery-Objekt benötigen. – Bharani

0

Wenn die Logik des Codes zu textboxes'name verwandt ist, ich die einzige Lösung zu sehen ist um diesen Code von Grund auf neu zu schreiben, dann kaufe dem Programmierer, der diesen Mist geschrieben hat, ein paar gute Designbücher.

0

Wenn Sie nicht auf Serversteuerelemente angewiesen sein möchten, können Sie die Request.Form-Auflistung verwenden.

Allerdings müssen Sie das Kontroll IDs verwenden zu sagen, ob es sich um ein Textfeld ist, die Frage der IDs:

Request.Form.AllKeys.Where(n => n.StartsWith("TxB_Customize")) 
        .Select(n => new[] { n, Request.Form[n] }); 

die eine Sammlung von {Id, Wert} Paare zurück.

+0

Wäre nicht die UniqueID? In diesem Fall würde n.StartsWith nicht funktionieren. –

+0

UniqueID: natürlich. Brauchen etwas etwas ausgeklügelter, um die Schlüssel zu entsprechen. – Richard

Verwandte Themen