2011-10-05 27 views
8

Bazı BoundFields ve iki TemplateFields ile GridView var. Bu iki TemplateFields içinde, DropDownList ve kullanıcıların değiştirebileceği TextBox içeren UserControls dinamik olarak oluşturuyorum.dinamik sütunlar, geri gönderildikten sonra kayboluyor

PostBack'dan sonra denetimlerin değerlerini almaya çalıştığımda, BoundFields'daki değerler hala var ancak dinamik denetimlerim kayboluyor. Onları tekrar oluşturabilirim ama kullanıcının değerlerini alamaz ... Kaybolmadan önce bu değerleri nasıl alabilirim? RowDataBound durumunda

: my düğme tıklama durumunda

Select Case type 
    Case "BooleanBis" 
     e.Row.Cells(2).Controls.Clear() 
     Dim list1 As BooleanBisList = New BooleanBisList(avant, False) 
     e.Row.Cells(2).Controls.Add(list1) 

     e.Row.Cells(4).Controls.Clear() 
     Dim list2 As BooleanBisList = New BooleanBisList(apres, True) 
     e.Row.Cells(4).Controls.Add(list2) 
    Case "Boolean" 
     e.Row.Cells(2).Controls.Clear() 
     Dim list3 As BooleanList = New BooleanList(avant, False) 
     e.Row.Cells(2).Controls.Add(list3) 

     e.Row.Cells(4).Controls.Clear() 
     Dim list4 As BooleanList = New BooleanList(apres, True) 
     e.Row.Cells(4).Controls.Add(list4) 
End Select 

, ben kullanıcı kontrolünü elde etmeye çalışmak:

İşte benim kod bazı var

Case "String" 
    temp.ChampValeurApres = DirectCast(Tableau1.Rows(i).Cells(selectedColumn).Controls(1), TextBox).Text 

ama var olmama hatası alıyorum. Bu olay o DataSource var için GridView veri sınırlama aldığında RowDataBound sadece ateş edeceği oysa her bir geri ateş olur çünkü

cevap

8

Sen RowCreated yerine RowDataBound dinamik denetimler oluşturmak gerekir.

Dinamik olarak oluşturulmuş kontroller her geri yüklemede daha önce olduğu gibi aynı kimliğe sahip olacak şekilde yeniden oluşturulmalı, ardından ViewState numaralı değerlerdeki değerleri korunacak ve olaylar doğru olarak tetiklenecektir (örneğin, bir DropDownList'in SelectedIndexChanged olayı).

Yani RowCreated bunları oluşturmak ve (DropDownList veri kaynağı/Öğeler veya TextBox -metin F. E.) RowDataBound onları "doldurmak" olmalıdır.

+0

Çok teşekkür ederim! Hala bir sorunum var, ben de kontroller içeren bir sütunum var. ve bu kontrollerin değeri geri gönderme sonrasında alınmaz. Herhangi bir fikir ? – user874854

+0

@ user874854: 'readonly' denetimleri, ViewState'deki istemcilerde değişiklik yapmayı sürdürmez (yalnızca sunuculardaki değişiklikler). Onları [Attributes] aracılığıyla (http://msdn.microsoft.com/en-us/library/system.web.ui.web.webcontrols.webcontrol.attributes.aspx) –collection üzerinden 'readonly' yapın, örneğin: 'TextBox1.Attributes .Add ("salt okunur", "Salt Okunur"); '. Bu şekilde ASP.NET'i kandırırsınız. Daha fazla bilgi için [here] (http://www.codeproject.com/KB/aspnet/Readonly.aspx) adresine bakın. –

0

kullanıyorum olmuştu: GridView özniteliklerde

EnableViewState="false" 

. Çıkarmak benim problemimi çözdü!