2011-10-05 34 views
8

Tôi có một số GridView với một số BoundFields và hai TemplateFields. Trong hai số này TemplateFields, tôi tự động tạo UserControls chứa một số DropDownList và một số TextBox mà người dùng có thể sửa đổi.cột động sẽ biến mất sau khi đăng lại

Khi tôi cố gắng lấy giá trị của các điều khiển sau PostBack, các giá trị trong BoundFields vẫn ở đó nhưng các điều khiển động của tôi biến mất. Tôi có thể tạo lại nhưng không nhận được giá trị của người dùng ... Làm thế nào tôi có thể nhận được các giá trị này trước khi chúng bị mất?

Dưới đây là một số mã của tôi:

Trong trường hợp RowDataBound:

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 

Trong nút sự kiện click của tôi, tôi cố gắng để có được sự kiểm soát người sử dụng:

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

nhưng tôi nhận được lỗi rằng nó không tồn tại.

Trả lời

8

Bạn nên tạo điều khiển động trong RowCreated thay vì RowDataBound vì sự kiện này bị sa thải trên mỗi postback khi RowDataBound chỉ sẽ cháy khi GridView được databound để nó DataSource.

Điều khiển được tạo động phải được tạo lại trên mỗi lần đăng lại với cùng ID như trước, sau đó chúng giữ nguyên giá trị của chúng trong ViewState và sự kiện sẽ kích hoạt chính xác (ví dụ: sự kiện SelectedIndexChanged của DropDownList).

Vì vậy, bạn nên tạo chúng trong RowCreated và "lấp đầy" chúng trong RowDataBound (f.e. các DropDownList nguồn dữ liệu/Các khoản mục hay một TextBox -Text).

+0

Cảm ơn bạn rất nhiều! tôi vẫn còn có một vấn đề, tôi có cột với các điều khiển chỉ đọc. và giá trị của các điều khiển này không được truy xuất sau khi đăng lại. bất kỳ ý tưởng ? – user874854

+0

@ user874854: điều khiển 'readonly' không duy trì các thay đổi trên client trong ViewState (chỉ thay đổi trên serverside). Làm cho chúng 'readonly' thông qua [Attributes] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.attributes.aspx) -kỹ thuật, ví dụ: 'TextBox1.Attributes .Thêm ("chỉ đọc", "chỉ đọc"); Bằng cách này bạn đánh lừa ASP.NET. Xem [ở đây] (http://www.codeproject.com/KB/aspnet/Readonly.aspx) để biết thêm thông tin. –

0

tôi đã sử dụng:

EnableViewState="false" 

trong GridView thuộc tính. Việc xóa nó đã giải quyết được vấn đề của tôi!

Các vấn đề liên quan