2011-07-06 6 views
1

내가 (내가 엔터프라이즈 라이센스가없는 나는이 OOTB 부분을 사용할 수 없습니다)을 SharePoint 사이트에 대한 간단한 RSS/Atom 수집기는 WebPart를 만들려고, 초보자 C# 프로그래머입니다 다시 나타났다 유지한다. 사용자로부터 URI를 받아 피드를 표시하는 라벨을 구성하고 모든 표시 해제 this.Controls; 레이블

  • 지우기 피드에 추가하려고 시도

    1. 새로운 피드 :

      나는 3 개 버튼이 피드 (에서 제거)

    2. 기본 피드 기본값을 URIs으로 가져 와서 라벨로 변환합니다 (this.Controls에도 추가).

    피드를 삭제하면 기본값으로 되돌릴 수 있습니다. 그러나 모든 피드를 지우고 새 피드를 추가 한 후에도 기본값이 추가됩니다 (한 번에 하나의 새 피드 만 추가 할 수 있으며 새 피드는 이전 버전을 덮어 씁니다). 나는 이것이 컨트롤 추가/제거 기능을 완전히 이해하지 못하기 때문에 이것이 의심 스럽다. 코드는 다음과 같습니다.

    ArrayList viewedFeeds = new ArrayList(); 
        ArrayList defaultFeeds = new ArrayList(); //Contains several default feeds, e.g. BBC news (http://feeds.bbci.co.uk/news/rss.xml) 
    
        private void newFeed_Click(object sender, EventArgs e) 
        { 
         renderFeed(userText.Text); 
        } 
    
        private void clearFeeds_Click(object sender, EventArgs e) 
        { 
         clearAllFeeds(); 
        } 
    
        private void defaultFeeds_Click(object sender, EventArgs e) 
        { 
         clearAllFeeds(); 
         initialiseFeedViewer(); 
        } 
    
        private void clearAllFeeds() 
        { 
         foreach (Label feed in viewedFeeds) 
         { 
          this.Controls.Remove(feed); 
         } 
         viewedFeeds.Clear(); 
        } 
    
        private void initialiseFeedViewer() 
        { 
         foreach (string uri in defaultFeeds) 
          renderFeed(uri); 
        } 
    
        private void renderFeed(String uri) 
        { 
         try 
         { 
          Label feed = new Label(); 
    
          // Create a Syndicated feed reader, parse the XML and add the relevant text to the label "feed" 
          feed.BorderStyle = System.Web.UI.WebControls.BorderStyle.Double; 
          viewedFeeds.Add(feed); 
          this.Controls.Add(feed); 
         } 
         catch (Exception ex) 
         { 
          //Print an error message (e.g. If the URI does not link to a suitable feed 
         } 
        } 
    
  • 답변

    1

    내가 번 이상 initialiseFeedViewer() 더 호출 된 밝혀 - 그것은 createChildControls() 방법이었다. 이 메서드는 생성자와 마찬가지로 한 번만 호출되었다고 가정했지만 페이지가로드 될 때마다 호출되는 것으로 보입니다.

    이것은 내 변수를 모두 지우는 성가신 부작용이 있으므로 표시된 피드를 추적하는 데 사용하고 있습니다. 쓸모없는 렌더링입니다.

    나는 이것을 셰어 포인트 목록에 대신 저장하여이 문제를 해결하려고 노력할 것입니다.

    0

    한 번에 두 개 이상의 컨트롤을 추가 할 수 없다는 문제가 있습니다. arraylist에 레이블을 추가하기 전에 레이블의 "Name"속성을 설정하고 레이블 컨트롤을 유지하는 데 사용하는 "panel"을 설정하십시오.

    private void renderFeed(String uri) 
    { 
        try 
        { 
         Label feed = new Label(); 
         feed.Name = uri; 
         //Create a Syndicated feed reader, parse the XML and add the relevant text to the label "feed" 
         feed.BorderStyle = System.Web.UI.WebControls.BorderStyle.Double; 
         viewedFeeds.Add(uri); 
         this.Controls.Add(feed); 
        } 
        catch (Exception ex) 
        { 
         //Print an error message (e.g. If the URI does not link to a suitable feed 
        } 
    } 
    

    새 항목을 추가 할 때 기본값을 렌더링합니다. 우연히 initialiseFeedViewer()를 호출하지 않을 것입니다.

    마찬가지로 사이드 노트로 arraylist 감가 상각되는 것으로 간주됩니다. 목록을 대신 사용해보십시오.

    List<string> viewedFeeds = new List<string>(); 
    List<string> defaultFeeds = new List<string>(); 
    
    +0

    'Label'에'Name' 속성이없는 것 같습니다. 이것이 'WebControl.Label'이라는 것을 증명합니까? 'ArrayList'에 대해 감사 드려요.'Java' 모드로 붙어 있습니다. – Landric

    +0

    Visual Studio에서 호출 계층 구조를 확인한 결과,'initialiseFeedViewer()'는 두 번의 호출 만 볼 수 있습니다. 하나는 프로그램의 시작 부분과 '기본 피드'버튼을 클릭하면됩니다. – Landric

    +0

    흠, label.Name 대신 label.ID를 시도하십시오. – Odnxe