2011-10-05 8 views
8

GridViewBoundFields과 2 개의 TemplateFields이 있습니다. 이 두 개의 TemplateFields에서는 사용자가 수정할 수있는 DropDownListTextBox을 포함하는 UserControls을 동적으로 만듭니다.포스트 백 이후에 동적 열이 사라짐

PostBack 뒤에 컨트롤의 값을 가져 오려고하면 BoundFields의 값은 그대로 있지만 동적 컨트롤이 사라집니다. 다시 만들 수는 있지만 사용자의 가치를 얻지는 못할 것입니다 ... 손실되기 전에 어떻게이 값을 얻을 수 있습니까? 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 

, 나는 사용자 정의 컨트롤을 얻으려고 :

여기 내 코드의 일부이다

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

을하지만, 나는 그것이 존재하지 않는다는 오류를 얻는다. 이 이벤트는 DataSource을의에 GridView가 데이터 바인딩 될때 RowDataBound 만 발생하는 반면 모든 포스트 백에 트리거됩니다 때문에

답변

8

당신은 RowCreated 대신 RowDataBound에 동적 컨트롤을 만들어야합니다.

동적으로 생성 된 컨트롤은 이전과 동일한 ID를 가진 모든 포스트 백에서 다시 만들어 져야하며 그 다음 값은 ViewState에 유지되고 이벤트는 올바르게 발생합니다 (예 : DropDownList의 SelectedIndexChanged 이벤트).

그래서 당신은 RowCreated에서 그들을 만들고합니다 (DropDownList 데이터 소스/항목 또는 TextBox 혼용을 f.e.) RowDataBound에서 그들을 "채우기"한다.

+0

대단히 감사합니다! 난 여전히 문제가있다, 난 읽기 전용 컨트롤과 열이있다. 이러한 컨트롤의 값은 다시 게시 후에 검색되지 않습니다. 어떤 생각? – user874854

+0

@ user874854 :'readonly' 컨트롤은 ViewState의 클라이언트 측에서 변경을 유지하지 않습니다 (서버 측에서만 변경 가능). [Attributes] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.attributes.aspx) -collection을 통해 읽기 전용으로 만듭니다 (예 :'TextBox1.Attributes .Add ("readonly", "readonly");'. 이런 식으로 ASP.NET을 속일 수 있습니다. 추가 정보는 [here] (http://www.codeproject.com/KB/aspnet/Readonly.aspx)를보십시오. –

0

내가 사용하고있었습니다 다음 GridView 속성에

EnableViewState="false" 

합니다. 그것을 제거하는 것은 나의 문제를 해결했다!

관련 문제