2014-10-20 3 views
0

OnItemDataBound에서 작성한 PDF 축소판 이미지가 포함 된 ListView가 있습니다. 모든 미리보기 이미지에는 업로드 할 페이지를 선택하는 확인란이 있습니다. 모든 것이 잘 작동합니다 - 지금까지. 지금은 모든 페이지를 선택하는 또 다른 체크 박스를 만든 문제입니다 : 내가 체크 박스를 선택하면 내 ListView에있는 모든 미리보기 썸네일이 내 ListView에있다onItemDataBound를 사용하여 ListView의 모든 확인란을 선택/선택 취소하십시오.

사라 : 이것은 내 CheckBox에있다

<asp:ListView ID="pdfPagesListView" runat="server" OnItemDataBound="pdfPagesListView_ItemDataBound"> 
    <ItemTemplate> 
     <div id="pdfFrameDiv" runat="server" class="pdfPage"><%# Container.DataItem %> 
      <div style="position:absolute;"> 
       <asp:Image ID="pdfPreviewImage" runat="server" /> 
      </div>        
      <div style="position:relative;height:188px;background-color:rgb(240,240,240)"> 
       <asp:Panel ID="thumbnails" runat="server" /> 
      </div>            
      <div style="position:relative; top:-14px; left:120px;"> 
       <asp:CheckBox ID="selectPdfPageCheckbox" runat="server" /> 
      </div> 
     </div> 
    </ItemTemplate> 
</asp:ListView> 

<asp:checkbox ID="selectAllPages" runat="server" AutoPostBack="true" OnCheckedChanged="selectAllPdfPages" /> 

protected void pdfPagesListView_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 
     if (byteArray.Length < 25000000) 
     { 
      ListViewDataItem dataItem = (ListViewDataItem)e.Item; 
      int i = dataItem.DisplayIndex; 

      if (Session["computedPages"] != null) 
      { 
       int[] computedPages = (int[])Session["computedPages"]; 
       if (computedPages[i] == 1) 
       { 
        dataItem.Visible = false; 
       } 
      }     

      try 
      { 
       Panel thumbnailPanel = (Panel)e.Item.FindControl("thumbnails"); 
       Thumbnail thumbnail = new Thumbnail(); 
       thumbnail.SessionKey = unique; 
       thumbnail.Index = i + 1; 
       thumbnail.DPI = 17; 
       thumbnail.Width = 200; 
       thumbnailPanel.Controls.Add(thumbnail); 

       Image pdfPreviewImage = (Image)e.Item.FindControl("pdfPreviewImage"); 
       pdfPreviewImage.Visible = false; 
      } 
      catch (Exception ex) 
      { 
       Image pdfPreviewImage = (Image)e.Item.FindControl("pdfPreviewImage"); 
       pdfPreviewImage.ImageUrl = "~/img/pdfPreview.jpg"; 
      } 

     } 

     else 
     { 
      Image pdfPreviewImage = (Image)e.Item.FindControl("pdfPreviewImage"); 
      pdfPreviewImage.ImageUrl = "~/img/pdfPreview.jpg"; 
     } 
    } 
} 

:

이리스트 뷰의 OnItemDataBound 코드 이 수표의 코드/체크 박스 이벤트를 취소 :

protected void selectAllPdfPages(object sender, EventArgs e) 
{ 
    if (selectAllPages.Checked == true) 
    { 
     foreach (ListViewDataItem item in pdfPagesListView.Items) 
     { 
      CheckBox cb = (CheckBox)(item.FindControl("selectPdfPageCheckbox")); 
      cb.Checked = true; 
     } 
    } 

    else 
    { 
     foreach (ListViewDataItem item in pdfPagesListView.Items) 
     { 
      CheckBox cb = (CheckBox)(item.FindControl("selectPdfPageCheckbox")); 
      cb.Checked = false; 
     } 

    } 

} 

이 내 페이지가 OnItemDataBound 이벤트 후 같은 모습입니다 : image1

는 IT가 selectAllPages 확인란을 선택 후 보이는 방법이 : image2

모든 미리보기 이미지를 잃지 않고 모든 확인란을 선택/선택 취소하고 싶습니다. 나는 ... 누군가가 나를 도울 수 사전에

감사합니다 희망

+0

나는 그것이 일어나는 이유를 알고 있지만 이것을 해결하는 방법을 알지 못한다고 생각합니다. 그 이유는 축소판 컨트롤을 동적으로 페이지에 추가하기 때문입니다. 동적으로 추가 된 컨트롤은 모든 포스트 백에서 컨트롤 트리에 다시 추가해야합니다. 귀하의 경우에는 데이터 바인딩 과정에서 한 번만 발생하기 때문에 추가 작업이 필요하지 않습니다. 문제를 해결하려면 클라이언트 측 솔루션으로 전환하거나 마크 업에 미리보기 이미지를 선언하십시오. 또는 최후의 수단으로 모든 게시물에 태그를 추가하는 방법을 생각하십시오 (그러나하지 마십시오) – Andrei

답변

2

왜 jQuery를 사용하여 클라이언트 측에서 만들고 싶지 않으십니까? 이렇게하면 클릭 할 때마다 서버에 웹 폼을 보내지 않고 체크 박스를 선택/선택 해제 할 수 있습니다. 그러면 축소판을 풀지 않을 것입니다.

0

나는 당신이 당신의 selectAllPages인지 여부를 확인할 필요가있는 경우를 Page_Load

protected void Page_Load(object sender, EventArgs e) 
    { 
     pdfPagesListView.DataSource=""; 
     pdfPagesListView.DataBind(); 
    } 

에 데이터 소스를 바인딩하지 않은 생각 귀하의 Listview의 DataBound 이벤트에서 체크 표시 여부.

감사합니다.

관련 문제