2012-03-04 2 views
1

에서 발생하지 않습니다GRIDVIEW 정렬 내가 내 코드에서 두 개의 컨트롤 다음 한 첫 ​​번째 클릭

있는 gridview 의 SqlDataSource (내있는 gridview의 소스) (데이터 표시)

내가있는 gridview를 변경하려면

, 하지만 내 sqldatasource에서 sqlcommandstring을 변경할 때, 내 DataGrid 테이블 정렬의 새로운 뷰에서 첫 번째 클릭에 대해 실행되지 않습니다. sqlcommandstring 변경 프로세스는 아래를 참조하십시오.

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if (IsPostBack) 
      { // Restore saved sqlcommand in page refresh, please see below 
       SqlDataSource1.SelectCommand = ViewState["MySQL"].ToString(); 
      } 
     } 
     catch (Exception ex){}    
    } 

    protected void btn_SearchLibrary_Click(object sender, EventArgs e) 
    { 
     SqlDataSource1.SelectCommand = "SELECT * FROM Books WHERE id=1 OR id=2"; 
     ViewState["MySQL"] = "SELECT * FROM Books WHERE id=1 OR id=2"; 
     //Saves sqlcommand in viewstate, to restore it in page refresh. 
    } 

답변

2

GridView의 DataBinding이 버튼의 Click 이벤트 처리기보다 먼저 발생한다고 생각합니다. 따라서 데이터 원본 자체가 변경되기 전에 표가 데이터 원본에서 이미 업데이트되었습니다. Click 이벤트 처리기에서 SelectCommand를 업데이트 한 후에는 눈금에 대해 DataBind를 명시 적으로 호출해야합니다.
또한 제쳐두고, Click 이벤트 처리기 전에 Page_Load도 발생하기 때문에 Page_Load에서 try-catch가 NullReferenceException을 억제하는 것처럼 보입니다. 따라서 ViewState["MySQL"]은 항상 처음에는 null이됩니다.

+0

이해하려고했지만 명확하게 얻을 수 없었습니다. 클릭 이벤트 처리기에 databind를 추가했으나 작동하지 않았습니다. – HOY

+0

내 대답이 기초가 아니기 때문에 일부 설명을 요청해야합니다. 저를위한 전형적인 사용법을 통해 갈 수 있습니까? 그것은 다음과 같습니다 : 처음으로 그리드가 비어있는 페이지가로드됩니다; 사용자가 SearchLibrary 버튼을 클릭하고 그리드가 채워집니다. 사용자가 열 머리글을 클릭하여 표를 정렬하지만 첫 번째 클릭이 처리되지 않습니다. 모든 후속 클릭이 올바르게 처리되고 정렬됩니다. 정확하니? –

+0

이것은 프로세스 : 페이지가 처음으로로드되는 방식입니다 (내 SqlDataSource1 -> Sqlcommandstring = SELECT *가 책에 포함되어 있기 때문에) 내부에 3 개의 요소가 있습니다. 또한 btn_SearchLibrary_Click 위의 클릭과 grid가 검색된 후 sort가 작동합니다. 2 개의 요소가 있으면 정렬이 잘되지 않습니다. (추신 : 나는 그것을 사용하지 않으면 그리드 뷰가 다시 3 개의 요소를 클릭 할 때마다 3 개의 요소로 돌아 가기 때문에 명령 문자열을 항상 동일하게 유지하기 위해 View 상태를 사용했습니다.) – HOY