2010-01-04 3 views
0

필자는 DataTable에 추출 된 '레이아웃'을 갑자기 필요로하는 비교적 간단한 Listview를 사용하여 일반적인 루틴을 내보내기 목적으로 Excel 스프레드 시트로 변환 할 수 있습니다.어떻게 정보를 추출/정보를 Listview (DataTable)로 변환 할 수 있습니까?

ItemTemplate은 셀에 일련의 텍스트, 데이터 바인딩 된 레이블 및 유효성 검사기가있는 텍스트 상자가있는 일련의 테이블 행입니다.

일반적으로 텍스트 상자에 입력 한 것과 같은 특정 값을 추출하려고 할 때 ListViewItem의 .FindControl 메서드를 사용합니다.

For Each objItem As ListViewItem In lvwOptions.Items 
    Dim objTextHrsLabor As TextBox = CType(objItem.FindControl("txtHrsOptByLabor"), TextBox) 
    decHours = CDec(objTextHrsLabor.Text) 
Next 

그러나이 경우 표시되는 모든 데이터 (모든 테이블의 '행 및 열')를 가져 오려고합니다.

ListViewItems의 ForEach/Next 루프 내에서 각 인스턴스의 컨트롤에 대해 ForEach/Next 루프 컨트롤을 시작했지만 실제로 몇 가지 테이블 셀이있는 컨트롤과 같이 매우 이상한 결과가 반환되었습니다.

나는 잘못된 방향으로 향하고있다. 내가 원했던 것은 멋지게 형식화 된 5 행 6 열 테이블을 5 행 6 열 데이터 테이블로 변환하는 것입니다.

내가보아야 할 또 다른 애비뉴가 있습니까?

답변

0

ListView의 기본 데이터 원본을 살펴 보겠습니다.

데이터 원본은 컬렉션 또는 IEnumerable이어야하며 데이터 테이블을 만들기 위해 반복 할 수 있어야합니다.

모든 요소가 동일한 유형이라면 첫 번째 요소를 사용하여 리플렉션을 사용하여 해당 요소의 속성을 살펴보고 테이블에 포함 할 열을 결정할 수 있습니다. 그런 다음 테이블에 DataRow를 추가하고 속성 이름을 사용하여 열을 채울 수 있습니다.

이것은 아마도 ListView의 생성 된 HTML을 반복하는 것보다 빠릅니다.

+0

나는 모든 '레이블'을 추가하지 않아도되기를 바랬습니다. 기본적으로 TabContainer의 각 탭에 하나씩 3 개의 Listview가 있으며 동일한 List (Of MyBusinessObject)의 다른 부분을 표시합니다. 원하는 목표는 화면에서 보는 것을 가져 와서 Excel로 '내보내는'것입니다. 우리는 ListView에 표시된 '테이블'로부터 데이터 테이블을 만들기를 원했기 때문에 datable을 Excel로 변환하는 루틴을 가지고 있습니다. – David

+0

흠. aspx-markup에 사용자 정의 헤더를 정의 했습니까? 내가 생각하는 컨트롤 계층 또는 생성 된 html을 조사해야 할 것이다. 하지만 일단 데이터를 가져 오면 데이터 소스를 통해 단계별로 행 데이터를 가져와야합니다.Wors 경우에는 Items 컬렉션을 단계별로 실행하여 ListViewDataItem을 살펴볼 수 있지만 분명히 지저분 할 것입니다. –

+0

열과 행 머리글 텍스트에 레이블을 사용해야한다는 것이 분명 해지고 있습니다. 그런 다음 각 ListView.Item의 .Controls를 반복해야합니다. Control.ToString 값을 분기하는 Case 문을 통해 DirectCast를 레이블 및 텍스트 상자에 넣을 수 있습니다. Object 유형이 "Web.UI.Webcontrols.LiteralControl"이고 CAST가 ""인 LiteralControl.Text 속성을 검사하면 행 끝을 알 수 있습니다. 추악하지만 작동 할 것 같습니다. – David

0

이 방법을 사용하여 ListView를 Excel로 내보내기 : http://aspalliance.com/771_CodeSnip_Exporting_GridView_to_Excel.

GridView를 다룰 줄은 알지만, 기본 구조가 테이블 인 한 ListView에 맞춰서 잘 작동합니다.

HTH.

+0

불행히도 기본 코드는 일반적인 List 컬렉션입니다. – David

+0

동일한 방식으로 작동합니다. 그냥 바인딩 목록, 그리고 그것도 작동합니다. –

0

사용할 수있는 ..

listView1.Items[0].SubItems[0].Text 

이, 도움이 정말 간단하고 쉬운 것입니다. 어쨌든 원하는 인덱스 &을 기반으로 정보를 추출 할 수 있습니다.

관련 문제