WebPart titles

26 בנובמבר 2008

תגיות:
אין תגובות


כשמוסיפים כמה WebParts עם אותו Title, הם מקבלים את השם בתוספת סוגריים מרובעות.



MyWebPart


MyWebPart [1]


MyWebPart [2]



העניין הוא, שזה לא באמת מוסיף את הסוגריים והמספר, אלא זה רק מופיע בתצוגה, והכותרת האמיתית של כל ה WebParts היא זהה, וכל ה WebParts נקראים בשם MyWebPart


זה יכול לגרום לכל מיני בעיות, לדוגמא, ממשתי Import של WebParts מדף לדף, (בעתיד אני אכתוב פוסט איך עושים את זה), וכשלחצו על Import, המשתמשים ראו TreeView עם רשימת השמות של ה WebPart, אבל היות שלכולם היה שם זהה, אז גם כשהמשתמש בחר אחד מה WebPart, זה היה מייבא לו את כל ה WebPart עם אותו השם.


כדי לפתור את זה כתבנו כמה מתודות, שמכניסות את הסוגריים לתוך הכותרת של ה WebPart


כמובן שירשנו מ WebPart ועשינו overridre ל – Title




  1       public override string Title


  2       {


  3           get


  4           {


  5               return base.Title;


  6           }


  7           set


  8           {


  9               if (value != base.Title)


  10              {


  13                  base.Title = CheckTitleChanged(this, value);


  14              }


  15          }


  16      }


 


 



בשורה מספר 13, מפעילים את המתודה שמחזירה את הכותרת המתאימה




   26     public string CheckTitleChanged(QsWebPart webPart, string title)


   27     {


   28         List<string> list = new List<string>();


   29         foreach (WebPart item in this.WebParts)


   30         {


   31             if (webPart.ID != item.ID)


   32             {


   33                 list.Add(item.Title);


   34             }


   35         }


   36         return TiltleHelper.TitleNameCorrection(list, title);


   37     }



אנחנו אוספים את כל ה Titles האחרים בעמוד הנוכחי.


 





 



   38     public static class TiltleHelper


   39     {


   40         private static Regex m_TiltleNameMatch;


   41 


   42         private static Regex TiltleNameMatch


   43         {


   44             get


   45             {


   46                 if (m_TiltleNameMatch == null)


   47                 {


   48                     m_TiltleNameMatch = new Regex(@"\[\d+\]$+");


   49                 }


   50 


   51                 return m_TiltleNameMatch;


   52             }


   53         }


   54 


   55         /// <summary>


   56         /// sets the right title string


   57         /// </summary>


   58         /// <param name="webPartTitles">list of title names in the current dashboard (NOT including the current title)</param>


   59         /// <param name="title">the title string</param>


   60         /// <returns>the correct title string – with a [#] postfix</returns>


   61         public static string TitleNameCorrection(List<string> webPartTitles, string title)


   62         {


   63             //the list includes the current title.


   64             if (webPartTitles.Where(t => t == title).ToList().Count > 0)


   65             {


   66                 if (TiltleNameMatch.Match(title).Length > 0)


   67                 {


   68                     //find the [#number#] at the end of the name and add one.


   69                     title = TiltleNameMatch.Replace(title, new MatchEvaluator(MatchTitle));


   70                     title = TitleNameCorrection(webPartTitles, title);


   71                 }


   72                 else


   73                 {


   74                     title += " [1]";


   75                     title = TitleNameCorrection(webPartTitles, title);


   76                 }


   77             }


   78             return title;


   79         }


   80 


   81         /// <summary>


   82         /// After the Match this methos increments the number in the brackets []


   83         /// </summary>


   84         /// <param name="m">the Match</param>


   85         /// <returns>Match string with an increament of 1</returns>


   86         private static string MatchTitle(Match m)


   87         {


   88             return "[" + (Convert.ToInt32(m.Value.Substring(1, 1)) + 1).ToString() + "]";


   89         }


   90     }


 

בקוד שמובא, למעשה אנחנו רצים בצורה רקורסיבית על כל ה Titles, כדי לוודא שהכותרת שניתן ל WebPart יהיה יחיד, ואם יש כבר אחד עם השם הזה, אז נשרשר לכותרת את המספר עם סוגריים.

 

תהנו

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *