큰 테이블에 일종의 데이터를 표시하는 비 시각적 웹 파트 인 SharePoint 2010을 개발 중입니다. 테이블 행은 웹 파트의 일부인 DropDownList에서 필터 조건을 선택하여 필터링해야합니다.CreateChildControls 후에 Controls.Remove()가 작동하지 않습니다?
DropDownList의 OnSelectedIndexChanged 이벤트는 CreateChildControls 이후와 OnPreRender 전에 발생합니다. 테이블의 셀에는 연결된 OnClick 이벤트가있는 LinkButton이 포함되어 있으므로 OnClick 이벤트가 실행되도록하려면 CreateChildControls에서 만들어야합니다.
DropDownList의 OnSelectedIndexChanged가 실행될 때까지 숨길 테이블 행을 알 수 없으므로 CreateChldControls에서 가능한 모든 테이블 행을 만들고 나중에 필터링 된 OnSelectedIndexChanged 이벤트를 직접 제거하거나 OnPreRender에서 제거하려고합니다. . 행은 부모 테이블의 컨트롤 컬렉션에서 물리적으로 제거되었지만 표시되지 않습니다.
테스트를 통해 CreateChildControls 메서드를 생성 한 후 임의의 행을 제거하려고 시도했지만 제대로 작동하지 않고 행이 렌더링되지 않았습니다.
어떻게 행을 제거 :Table mt = FindControl("matrixtable") as Table;
Helpers.Log("Controls in Table: " + mt.Controls.Count);
foreach (int kdid in kdIdsInvisible)
{
TableRow c = mt.FindControl("kdrow" + kdid) as TableRow;
Helpers.Log(c.ID);
mt.Controls.Remove(c);
}
Helpers.Log("Controls in Table: " + mt.Controls.Count);
출력 :
Controls in Table: 88
Controls in Table: 2
그러나 모든 행이 아직 렌더링 ...
이에 대한 해결책이 있습니까? 미리 감사드립니다.
행을 제거하는 작업 예입니다 함께 라인
mt.Controls.Remove(c);
를 교체하려고? PreRender에서 제거를 시도하십시오. – Peter먼저 OnPreRender에서 컨트롤을 제거하려고했습니다. 그것은 작동하지 않았다. 컨트롤이 제거되었지만 (나는 체크했다) 어쨌든 렌더링되었다. 컨트롤을 제거하는 것은 CreateChildControls에서만 작동하지만 현재 제거 할 항목을 알지 못합니다. 나는 그것을 OnPreRender에서 알 것입니다. 닭고기 또는 계란 딜레마. – elsni
CreateChildControls에 테이블을 추가하는 대신 항목을 별도의 목록에 추가하십시오. 그런 다음 추가 할 항목을 알고있는 OnPreRender를 추가하십시오. 그냥 해결 방법. 코드에 뭔가 이상한 점이있다. init 또는 load에 동적 컨트롤을 추가하지 않으면 포스트 백 이벤트를 처리하는 데 문제가 발생할 것이다.어쩌면 거기에 올바른 렌더링을 할 viewstate 목록을 저장할 수 있습니다. – Peter