2012-03-07 3 views
2

검색 단추가있는 페이지에 GridView가 있습니다. 시작하기 위해 GridView가 표시되지 않으므로 결과를 검색하기 전에 사용자가 검색을 클릭해야합니다. DataSourceID는 ObjectDataSource의 ID로 설정됩니다. click이 호출되면 클릭 핸들러에서 다음 메서드가 호출됩니다.ASP.NET 페이지에서 DataBind가 자동으로 호출되는시기는 언제입니까?

private void PopulateGrid() 
{ 
    gv.Visible = true; 
    gv.DataBind(); 
} 

Page_Load 처리기에서 동일한 메서드가 호출 될 때 문제가 발생합니다.

if(!PostBack && Session["search"] != null) 
{ 
    SetSearchFromSession(); 
    PopulateGrid(); 
} 

이 경우 문제는 ObjectDataSource를의 선택 이벤트가 두 번 발사된다는 점이다 : 우리는 이런 일을 자신의 세션에서 사용자의 검색 조건을 저장하고 그들에게 페이지가 처음 액세스 시간을 검색 할 수 있습니다. GridView가 Visible으로 설정되면 DataBind()가 호출되면 다시 한 번 수행됩니다. 나는 이것을 gv.Visible = true으로 대체하여 이것을 고쳤다. Page_Load에서 PopulateGrid();에 대해

그러나 나는 무슨 일이 일어나고 있는지 알고 싶습니다. 왜 페이지로드에서 GridView를 볼 수 있도록 설정하면 버튼 클릭 이벤트의 호출이 데이터 바인딩되지 않습니다.

답변

1

데이터 소스를 선언적으로 설정하면 PreRender 이후에 호출되므로 DataBind를 호출하면 다시 호출됩니다. (2 회)를 페이지의 PreRender 이벤트 후에 발생 컨트롤의 PreRender 이벤트 이후에 발생

데이터 바인딩

. (이것은 당신이 컨트롤의 DataBind 메서드를 호출 때 그렇지 않으면 이벤트가 발생합니다. 누구의 DataSourceID 속성을 선언적으로 설정되어 컨트롤에 적용됩니다.)

이 이벤트는 데이터에 대한 제어 를 결합하는 과정의 시작을 표시합니다. 이 필요한 경우이 이벤트를 사용하여 데이터베이스 연결을 수동으로 열고 쿼리가 실행 전에 동적으로 매개 변수 값을 설정합니다.

source

+1

확인을 클릭합니다. 그러나 DataBind가 Page_Load에서 호출 될 때 두 번 호출되는 이유는 무엇이며 버튼 클릭에서 호출 될 때 한 번만 호출됩니까? – Colin

관련 문제