2009-02-27 26 views
2

Arkadaş,döngü

Ben, 100 veya daha fazla metin kutularının bir ızgara (HTML VEYA ASP.NET) her sabit uzunlukta bir metin değeri içeren olacak mı bunların TÜM ihtiyaç kullanılarak 100 metin kutularının değerleri almak nasıl Veritabanının toplu olarak güncellenmesi için arka uç formuna geri döndü ..

Bunu basitçe, arkasındaki koddaki tüm Control .text özelliklerinden geçerek yapabilirim. Ancak bu, kodu büyük ve çirkin hale getirir.

herhangi neden bazı kontrollü döngü yapısını kullanarak denetimler arasında gidip veriyi

yani

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

almak için olup olmadığını merak ediyorum bu metin kutularının tümü üzerinde benzersiz kimlik etiketine sahip olduğuna dikkat edin

sayfa yani

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

Bunu unuttuğum için özür dileriz, metin kutuları sütunlar halinde gruplanır ve belirli bir sütundaki her metin kutusu, benzer örnekte, yani "Txb_Customize" ifadesini verilen örnekte paylaşır.

Değerleri alırken, nereden geldiğini de bilmem gerekiyor (metin kutusu kimliği olabilir).

cevap

1

veya benzeri bir şey yapabilirsiniz:

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

verilerin bu dizinin bir parçası olmayan yanı sıra, hangi aslında başka textboxes varsa, bu iyi olabilir.

0

bunun kolay olacağını metin kutuları var içinde olan tüm eğer aksi yapmanız gerekebilir, (MyContainer.Controls birlikte) kabın denetimler arasında yineleme: Control.Controls de

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

bak özelliği.

Sen gibi bir şey isteyeyim:

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

.NET 3.5 kullanıyorsanız, LINQ ile daha basit bir şekilde yapabilirsiniz:

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

lanet olsun ... linq-çözümü aklıma geldi, ben gönderdikten sonra ... –

+0

Bu LINQ çözümü ... vay! :) –

1

Sen javascript bunu yapabilir - onlara bir sınıf adı verin ve hepsini bir koleksiyona getirin ve koleksiyondan geçin ve ardından değerleri ajax kullanarak gönderin. JQuery burada çok kullanışlı olabilir -.

$ ("sinifIsminiz") her (function (indeks) { $ (this) .val() // Bu metin kutusu değeri olacaktır})

Eğer büyük bir dize sikke ve sunucu tarafında ayrıştırmak veya bir ad değeri dizisi oluşturmak ve sonra da yerine

+0

Hey Bharani Ben JQuery ile o kadar da femilier değilim, ancak ben herhangi bir şekilde sayfada büyük miktarda java betiği var. Lütfen cevabınızdaki "(index)" bölümünü açıklayabilirsiniz. yani onu nasıl alacağım. ya da sadece bir yer tutucu. Geri kalanını anladım. Teşekkürler –

+0

her işlev döngü için ve yinelenen koleksiyonun indeksi geri arama işlevine bir parametre olarak geçirilir. Geri arama içinde gerçek DOM öğesine ihtiyacınız varsa bunu kullanabilirsiniz veya jquery nesnesine ihtiyacınız varsa $ (this) kullanabilirsiniz. – Bharani

0

kodunun mantığı textboxes'name ilişkin zaman, gördüğüm tek çözüm olduğunu işime yarar Bu kodu sıfırdan yeniden yazmak için, bu yazıyı yazan programcıya bazı iyi tasarım kitapları satın alın.

0

Sunucu denetimlerine bağlı kalmak istemiyorsanız, Request.Form koleksiyonunu kullanabilirsiniz.

Eğer Sorunun kimlikleri kullanarak, bir metin kutusu olup olmadığını söylemek için kontrol kimlikleri kullanmanız gerekecektir Ancak

:

{İd, değer} çiftleri topluluğu döndüren
Request.Form.AllKeys.Where(n => n.StartsWith("TxB_Customize")) 
        .Select(n => new[] { n, Request.Form[n] }); 

.

+0

UniqueID olmaz mıydı? Bu durumda N.StartsWith işe yaramazdı. –

+0

UniqueID: elbette. Anahtarları eşleştirmek için biraz daha karmaşık bir şeye ihtiyacımız var. – Richard