2014-10-15 2 views
0

페이지에로드되고 다른 GridViews에 대한 중첩 역할을하는 GridView 컨트롤이 있습니다. 각 자식 GridView에는 동일한 열과 데이터 유형이 포함되어 있으므로 사용자가 LinkButton을 클릭하여 지정된 정렬 식으로 각 GridView를 정렬 할 수있게하려고합니다. 여기 제가 지금까지 가지고있는 코드는 작동하지 않습니다. 그냥 PostBack으로 이동하지만 같은 순서로 데이터를 반환합니다.ASP.NET 컬렉션의 각 Gridview 정렬

foreach (Control c in Page.Controls) 
    { 
     if (c.ID == "dgvResults") 
     { 
      GridView s = (GridView)c; 
      DataTable dataTable = s.DataSource as DataTable; 

      if (dataTable != null) 
      { 
       DataView dataView = new DataView(dataTable); 
       dataView.Sort = "OEN ASC"; 

       s.DataSource = dataView; 
       s.DataBind(); 
      } 


     } 
    } 

편집 1 : 나는 데이터 소스가 더 이상 다시 게시에 바인딩 것을 발견, 그래서 내가 세션 변수에 DataTable을로의 GridView 데이터 소스를 저장해야합니다. 이제는 그 일을 할 수 없습니다.

편집 2 : 내 자식 GridViews의 DataBinding 및 DataBound 이벤트에 Gridview.DataSource를 저장하려고 시도했지만 어느 경우에도 저장되지 않습니다. 위 코드에서 다시 호출하려고하면 Datatable을 포함해야하는 세션 변수가 존재하지 않습니다. 여기

내가 DataTable을 저장하기 위해 넣어 한 코드입니다 :

// The variable 's' represents the GridView control that triggered the DataBinding event 
Session["dtResults"] = s.DataSource as DataTable; 

// The code below is how I call the Session variable that I set earlier in the DataBinding event 
if (Session["dtResults"] != null) 
{ 
    DataTable dataTable = (DataTable)Session["dtResults"]; 
    ... 
} 
+0

gridview에 대해 'viewstate'를 활성화하고 시도 했습니까? –

+0

ViewState가 이미 활성화되어 있고 ViewState [] 변수에 데이터 테이블을 저장하려고했습니다. GridView 중첩을 버리고 단일 GridView 컨트롤에 저장된 데이터를 그룹화하는 경로를 따라야 할 수도 있습니다. – JJT

답변

0

이이 질문을 가까이 할 수있는 올바른 방법으로되지 않을 수도 있습니다,하지만 난 그것을이 방법에 대한 정착했습니다 나를 위해 일합니다.

진짜 문제GridViews이 다시 게시에 내 DataSources에 매개 변수 값을 공급 DropDownList 컨트롤의 무리에 부착 된 것이 었습니다. 1 GridView으로 제한했다면 DataTableViewState에 저장할 수 있었지만 동적으로 채워지는 GridViews의 중첩을 처리했기 때문에이 작업을 수행 할 수 없었습니다.

둥지에 각 GridView을 반복하는 대신 하나만 추가 DropDownList,이 하나는 GridViews와 일치하는 필드 이름 목록을 포함하고 사용자는 어떤 필드 그들은 데이터를 주문하려고합니다. 그런 다음이 목록의 값은 PostBack에 의해 DataSource의 저장 프로 시저에 전달되고 내부적으로 매개 변수를 처리합니다.

이런 식으로하는 것이 좋은 점은 사용자가 각각 GridView을 개별적으로 정렬 할 수있는 옵션을 여전히 가지고 있다는 것입니다.