2011-01-18 5 views
0

다중 선택 옵션이 true이고 선택한 인덱스가 변경 될 때마다 다시 게시해야하는 C#, .net, System.Web.UI.WebControls.Lisbox 참조 .다중 선택 목록 상자의 SelectedIndex를 마지막으로 선택한 항목으로 변경

문제는 [SelectedIndex/SelectedItem/SelectedValue]는 항상 첫 번째로 선택된 항목의 값에 해당합니다. 두 번째 항목 인 세 번째 항목을 클릭해도 SelectedIndex가 변경되지 않으므로 목록 상자가 다시로드되고 선택한 항목의 가장 높은 위치로 스크롤됩니다.

+0

내가 가진 가장 가까운 솔루션은 마지막으로 클릭 한 항목을 추적하는 글로벌 javascript var입니다.하지만 이상적이지는 않습니다. 미리보기에서 목록 상자는 가장 많이 선택된 항목으로 이동합니다 (자바 스크립트가 실행되기 전에). – bcm

+0

또한 ... SelectedIndexChange 함수를 디버깅 할 때 선택한 항목이 캐시 된 목록이 있지만 추가 된 마지막 항목이 없습니다. – bcm

+0

포스트 백을 여전히 사용하는 동안 백엔드에서 이것을 수행하는 실제 방법이 없다고 생각합니다. Listbox의 경우 true 옵션입니다. 그렇다면이 스레드를 닫습니다. – bcm

답변

0

까지이 컨트롤에 관한이 작업을 수행 할 수있는 방법은 없습니다 채울하지 않도록해야합니다.

+0

헛소리 :) 내 대답을 참조하십시오. 나는 그것을 시도하지 않았지만 원칙적으로 효과가있다. 행운을 빕니다. – Triynko

0

Brandon - 목록 상자를로드하는 곳의 코드를 공유 할 수 있습니까? (포스트 데이터가 처리 된 후) 다시 게시물 목록 상자를 다시로드

  1. 동적으로로드 목록 상자 늦었 페이지 수명주기가되도록 : 아래의 선택을 보유하지 않기 목록 상자에 대한 몇 가지 가능한 이유는 포스트 백 데이터를 처리 할 수있는 기회
  2. 클라이언트 ID가 변경되도록 포스트 박스 데이터 처리가 수행 될 때 동적으로 목록 상자 (템플릿이있는 상위 항목)가로드됩니다.
+0

목록 상자에 선택 항목이 있습니다. 항목 중 마지막으로 클릭 한 항목이 무엇인지 알 수 없습니다. – bcm

+0

@Brandon, 문제를 이해했습니다. 가능한 해결책은 이전에 선택한 항목을 추적하여 지금 변경된 항목을 판별 한 다음 Java 스크립트를 사용하여 컨트롤을 스크롤하는 것입니다. IMO, 더 나은 해결책은 몇 가지 대체 UI를 고려하는 것입니다. 예를 들어, 두 개의 나란히있는 목록 상자가 있습니다. 하나는 사용 가능한 옵션을 표시하고 다른 옵션은 왼쪽/오른쪽 화살표 단추를 사용하여 선택/선택 취소를 표시합니다. – VinayC

+0

불행히도 두 가지 옵션을 모두 고려했습니다. 목록 상자는 삭제 옵션이있는 정렬 목록이므로 분리 된 두 개의 목록 상자로 분리하면 적용되지 않습니다. javascript 옵션은 작동하지만 사전 렌더링 이후입니다. 따라서 하나의 항목을 맨 위에 선택한 다음 나중에 맨 아래에있는 항목을 선택하면 목록 상자에 점프 할 수 있습니다. – bcm

0

SelectedIndex는 항상 선택된 가장 낮은 인덱스를 가리 킵니다. ListBox.SelectedIndex 속성의 정의입니다.

목록에서 선택한 항목의 순번 색인 을 가져 오거나 설정합니다.

수동으로 selectedindex 속성을 설정하면 다른 모든 선택이 선택 취소되며, 특정 선택 항목으로 스크롤 할 수있는 방법이 (.net 코드에서) 없음을 확신합니다.

나는 무엇을 하려는지 명확히 알지 못했지만 GetSelectedIndices ListBox 함수를 사용하여 선택한 모든 인덱스를 캡처하고 이전에 캡처 한 선택한 인덱스와 비교하여 가장 최근에 선택된 인덱스를 확인할 수 있습니다 목.

+0

모든 선택된 인덱스를 캡처 할 수 있지만 ListBox 클릭 + 포스트 백 전에 이전에 선택한 인덱스를 캡처하는 방법을 모르겠습니다. – bcm

+0

SelectedIndex를 수동으로 설정하면 선택한 여러 항목이 자동으로 삭제됩니다. 그래서 나는이 문제에 대한 해결책이 없다고 생각합니다. 정말 긴 목록 상자가있을 때 짜증나게되며, 아래쪽 항목을 클릭하면 선택한 항목 목록에서 더 높은 모든 선택된 항목에 대한 다시 게시 및 위치가 생겨 가장 최근에 클릭 된 항목을 숨길 수 있습니다. – bcm

+0

두 번째 목록 상자를 사용하여 선택한 항목 만 표시 할 수 있습니다. 각 SelectedIndexChanged 이벤트를 사용하여 두 번째 목록을 다시 작성할 수 있습니다. – jlnorsworthy

0

브랜든 당신이 때마다 목록 상자에게 페이지가로드

+0

내가 사전 한정자로 언급 한 것처럼. 다시 게시 옵션 (따라서 자동 채우기)이 필요하며 솔루션에 대해 true로 설정됩니다. – bcm

+0

전체 목록 상자와 자동 포스트 백에 의존하는 컨트롤을 리팩터링해야 할 수도 있습니다 ... – bcm

+0

페이지가 다시 게시 될 때마다 내 목록 상자를 다시 게시 할 때마다 해당 문제가 포스트 백에 있었을 때가있었습니다. – Baharanji

0

이것은 엄밀히 말하면 스크롤 문제입니다.

document.all.getElementById("elementID").scrollTop = VALUE. 

그래서 사후을 수행하는 자바 스크립트 핸들러를 변경 :

명시 적으로, 당신은 scrollTop 속성을 설정 자바 스크립트를 사용할 필요가 목록 상자의 스크롤 값 (또는 그 문제에 대한 모든 요소)를 제어하려면 다시 "javascript : __ doPostBack (...")처럼 보이는 목록 상자에 해당합니다. 현재 scrollTop 값을 가져 와서 숨겨진 변수에 저장 한 사용자 지정 함수 호출로 바꾸고 원래 __doPostBack을 호출합니다 to.

왕복 이동 후에는 숨겨진 값이 클라이언트에 계속 남아 있어야하므로 J avaScript 페이지로드 이벤트에서 숨겨진 값을 읽고 목록 상자의 scrollTop에 다시 적용하면됩니다. 목록 상자는 게시가 발생하기 전의 위치에서 정확하게 스크롤됩니다.

관련 문제