2012-01-23 4 views
6

비슷한 질문이 있지만 그 중 아무 것도 도움이되지 않는 것 같습니다. 그래서 더 구체적인 경우를 설명하고 누군가가 나를 도울 수 있는지 알아 보겠습니다 :)gridview의 열을 동적으로 재정렬하는 방법

여기에 templatefields가있는 gridview가 있습니다. 사용자가 해당 열을 순서 지정하도록하고 싶습니다. 가 표시됩니다. 따라서 사용자는보기를 작성하고 첫 번째, 두 번째 등 표시 할 열을 결정합니다.

그래서 기본적으로, 나는 그리드에 데이터가로드 된 직후 열의 순서를 변경해야합니다.

쉽게 들리지? 글쎄, 분명히 그렇지 않아. 적어도 나는 그것을 아직 성취 할 수 없었다.

일부 메모 : - 당연히 나는 AutogenerateColumns를 false로 설정했습니다. - SQL select 열 변경 순서는 이전 항목 때문에 작동하지 않습니다. - 코드로 열을 생성하지 않으려합니다.

아이디어가 있으십니까?

+0

다음은 동적으로 열을 재정렬하는 방법입니다. http://stackoverflow.com/a/28611217/215752 – Hogan

답변

18

코드 숨김에서 Gridview의 Columns 컬렉션을 수정할 수 있습니다. 따라서이 작업을 수행하는 한 가지 방법은 컬렉션의 현재 위치에서 열을 제거한 다음 다시 새 위치에 삽입하는 것입니다. 첫 번째 열의로 두 번째 열을 이동하기를 원한다면

예를 들어, 당신은 할 수 :

var columnToMove = myGridView.Columns[1]; 
myGridView.Columns.RemoveAt(1); 
myGridView.Columns.Insert(0, columnToMove); 

을 무작위로 주위에 그들 모두를 이동해야하는 경우에, 당신은을 복제하려고 할 수 있습니다 필드 컬렉션, 당신이 그들에되고 싶은 순서대로 그들 모두를 다시 삽입 한 다음의 GridView에서 컬렉션을 취소합니다.

var columns = myGridView.Columns.CloneFields(); 
myGridView.Columns.Clear(); 
myGridView.Columns.Add(columns[2]); 
myGridView.Columns.Add(columns[0]); 
etc.. 

을 나는이 모든 데이터 바인딩 후에 작동 여부를 100 % 확실하지 않다 , 그렇게하지 않으면 않는 한, Page_Init이나 어딘가에서 bindin 전에 그것을 할 것입니다. 지.

+0

정말 멋졌습니다! 그러나 단 한 가지 ... OnRowCommand 이벤트에서 일부 논리를 적용하는 그리드에 단추가 있습니다. 글쎄, 지금은 행이 재정렬 된 후, 그 방법은 절대로 실행되지 않으며 버튼을 누른 후에도 일부 열은 비어 있습니다 ... – Ragalante

+0

'myGridView.Columns.CloneFields();를 사용하여 발견했습니다. 모든 칼럼 객체들 (문제가 될 수 있음)을 가져올 수 있습니다. 예를 들어,'BoundField'를 상속받은 커스텀 칼럼을 가지고 있다면 객체를'BoundField'에 복제 할 것입니다. 이 문제를 해결하려면 : myGridView.Columns.OfType (). ToList();'이렇게하면 원래 열 객체에 대한 참조를 유지하면서 새 컬렉션을 만들 수 있습니다. –

관련 문제