2011-07-06 4 views
0

내 프로젝트에는 일부 정보를 표시하는 GridView가 있습니다. GridView에는 데이터를 마사지하는 OnRowDataBound 처리가 있습니다. 내가 뭘 하려는지 CSV 파일을 생성 할 수 있도록 결과 GridView를 DataTable에 복사하는 것입니다. 사용자가 버튼을 클릭하면 CSV가 생성됩니다. 따라서 GridView가 화면에 표시되고 채워지고 포스트 백이 발생합니다. GridView가 PostBack에서 다시 바인딩되지 않습니다. 이를 위해 권장되는 방법은 무엇입니까? 다음은 현재 시도하고있는 코드이지만 제목과 빈 행으로 끝납니다. 디버깅은 표제가 정확하고 포함 된 행 수가 GridView와 동일하더라도 row.Cells [i] .Text가 비어 있음을 확인합니다.다시 게시 할 때 gridview 내용을 데이터 테이블에 복사하는 방법

DataTable dataTable = new DataTable("export"); 

foreach (DataControlField column in myGV.Columns) 
{ 
    dataTable.Columns.Add(new DataColumn { ColumnName = column.HeaderText }); 
} 

foreach (GridViewRow row in myGV.Rows) 
{ 
    DataRow dataRow = dataTable.NewRow(); 
    for (int i = 0; i < row.Cells.Count; i++) 
    { 
     dataRow[myGV.Columns[i].HeaderText] = row.Cells[i].Text; 
    } 
} 

답변

1

GridView가 아니라 GridView에 바인딩하는 데이터 개체로 작업해야합니다. 바인딩 후 gridview의 데이터에 후크가 없습니다.

+1

+1 @ 윌리엄 : 추가 참고 : 페이징 (또는 활성화)을 사용하는 경우 DataTable의 행에는 현재 표시된 PageSize- 숫자의 DataRow 만 포함됩니다. 따라서 CSV로 내보낼 때 데이터베이스에서 데이터를 다시로드하는 것이 좋습니다. –

+0

감사합니다. 내 데이터 소스 (개체 목록)에는 필자가 필요로하지 않는 추가 필드가 있으며 GridView OnDataBound 이벤트는 데이터를 일부 조작합니다. 다시 바인딩 GridView GridView에서 내 스프레드 시트를 만들려면 일종의 내부 DataTable에 액세스 할 수 있습니까? 내 다른 옵션을 데이터 테이블을 반환하고 내 스프레드 시트 및 GridView 모두 사용하는 메서드를 만드는 것 같아요. – William

관련 문제