2009-12-19 3 views
0

나는 미리로드에 프로그래밍 방식으로 설정 내 페이지의 데이터 소스에 체크 박스리스트를()이 이벤트 :CheckboxList에서 업데이트 (변경된 항목)를 얻는 방법?

당신이 항목을 선택하거나하지해야하는지 여부를 확인합니다 foreach 문에서 보는 바와 같이
protected void Page_PreLoad() 
{ 
     if (!Page.IsPostBack) 
     { 
     CheckBoxList1.DataSource = NoK.AcceptedNoks((Guid)Membership.GetUser().ProviderUserKey); 
     CheckBoxList1.DataTextField = "FullName"; 
     CheckBoxList1.DataValueField = "NoKId"; 
     CheckBoxList1.DataBind(); 
     } 
foreach (ListItem chk in CheckBoxList1.Items) 
{ 
    if (PrivateMessage.HasAccess(Request.QueryString["MessageId"], chk.Value)) 
    { 
     chk.Selected = true; 
    } 
} 

} 

. 그리고 그것은 잘 작동합니다. 이는 최종 사용자가 목록 항목을 편집 할 수 있고 기본적으로 일부 항목이 검사되었음을 의미합니다. 지금은 버튼을 클릭하여 아이템을 얻으려면 :

protected void UpdateRightBtn_Click(object sender, EventArgs e) 
{ 
    var SelectedNokIds = 
     CheckBoxList1.Items 
     .OfType<ListItem>() 
     .Where(li => 
      li.Selected == true) 
      .Select(l => new Guid(l.Value)); 
} 

하지만 SelectedNokIds의 항목은 여전히 ​​오래된 항목이 아니므 SelectedNokIds에서 사용자 변경 확인란 경우에는 효과 apeares. 왜 ???

도와주세요!

답변

0

다시 게시 할 때 값을 다시 설정하여 효과적으로 사용자의 선택을 지우는 것처럼 보입니다. 다시 게시가 아닌 경우에만 값을 초기화해야합니다.

+0

답장을 보내 주셔서 감사 합니다만 Unfotunatlly 데이터 소스를 다시 설정하는 곳은 어디에도 없습니다. 그냥 PerLoad(). – mahdiahmadirad

0

foreach (ListItem chk in CheckBoxList1.Items) {if (PrivateMessage.HasAccess (Request.QueryString [ "MessageId"], chk.Value)) {chk.Selected = true; }}

이 줄은 모든 페이지로드시에 실행되므로 선택을 재설정합니다 (적어도 선택한 것은 true로 설정 됨). 그 안에 있으면 안돼! Page.IsPostback도? 그리고 업데이트 버튼에서 다시 바인딩 할 수 있습니다 ...

변경된 사항을 알아야 할 경우 데이터 소스의 항목을 다시 쿼리하고 새 선택 목록과 상호 참조해야합니다.