מי האבא שלי

יום שני, מאי 3, 2010

בדיקה האם אחד מהאבות בהיררכיה של הדף הוא מסוג מסויים. לפעמים אנחנו צריכים לדעת האם אנחנו נמצאים בתוך Control מסוים, דוגמא טובה לזה היא – האם אנחנו נמצאים בתוך UpdatePanel. למשל – בפוסט הזה הסברתי כיצד לפתור את בעיית רישום קבצי javascript מתוך user control. תוכלו לעיין שם כדי להבין אבל בגדול הפיתרון היה לכתוב משהו כזה.   if (!Page.ClientScript.IsClientScriptIncludeRegistered("key")) {     string url = ResolveClientUrl("~/Scripts/file.js");     Page.ClientScript.RegisterClientScriptInclude("key", url); } בעיה. מסתבר שבמידה וה – User Control נמצא בתוך Update Panel הקוד לא יעבוד. וצריך לרשום קוד כזה. ScriptManager.RegisterClientScriptInclude(this,                                         typeof(UserControlBase),                                         "key",                                         ResolveClientUrl(url)); והפיתרון. כדי לדעת באיזה context אנחנו נמצאים כתבתי את ה – Extension Method הבא. public static bool IsMyParentOfType<T>(this Control...
6 תגובות

Add functionality using Document Object Model Prototypes (IE8)

יום שלישי, אפריל 20, 2010

  אחד מהיכלות החדשות שיש לנו ב - IE8 זה ההוספה של prototype ל - DOM.   אני לא אסביר בפוסט הזה מהו ה - prototype. אבל אם אתם לא מכירים את המושג (שקיים כבר הרבה לפני IE8) אני ממליץ לכם לקרוא את הפוסט הזה (לפחות את החלק הראשון) - או את הפוסט הזה - Object Oriented Programming in JavaScript   ב - IE8 הוסיפו ל - DOM את היכולת לשנות ולהוסיף פונקציות בעזרת prototype.   לדוגמא. אני מניח שהרבה פעמים יצא לכל אחד מכם לכתוב פונקציה שנקראת כך:   function HideFunc(obj) {     obj.style.display = 'none'; }   ומן הסתם השתשמתם בפונקציה כדי להסתיר אלמנטים במסך.     שימו לב לקוד הבא:   function HideFunc() {     this.style.display...
אין תגובות

Enum.GetNames – (array of enum not of string)

יום שבת, פברואר 13, 2010

  כשרוצים לרוץ בלולואה על כל ה - האפשרויות ב - enum כלשהו, בדרך כלל רואים קוד כזה     string names = Enum.GetNames(typeof(MyEnum)); foreach (string item in names) {     MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), item);     // logic... }   מה שעשיתי היה לקבל את כל מה שיש ב - enum כמערך של מחרוזות ואז בלולאה להמיר כל אחד ממנו למופע של ה - enum.     כדי לא לכתוב את הקוד (המכוער) כל הזמן אני מעדיך לכתוב כך:   MyEnum names = typeof(MyEnum).GetNames<MyEnum>(); foreach (MyEnum item in names) {     // logic }   וזה מתאפשר לי בזכות ה - Extension Method הבא:   public static T GetNames<T>(this Type enumType) where T : struct {     string names = Enum.GetNames(enumType);     T returnArray =...
תגיות: ,
2 תגובות

string.ToLower ToTitleCase

יום ראשון, ינואר 24, 2010

  חבר לעבודה (רון כהן) שאל אותי איך אפשר לקבל את הפונקציונליות של ToLower עבור האות הראשונה של כל מילה, לדוגמא shlomo goldberg יהפוך ל - Shlomo Goldberg.   זה הקוד שנתתי לו   string str = "shlomo goldberg";   CultureInfo c = new CultureInfo("en-US"); str = c.TextInfo.ToTitleCase(str);   הוא כמובן הפך את זה ל - extension methods     namespace System {     public static class StringExtension     {         public static string ToTitleCase(this string str)         {             CultureInfo c = new CultureInfo("en-US");             return c.TextInfo.ToTitleCase(str);         }     } }   static void Main(string args) {     string str = "shlomo goldberg";     str = str.ToTitleCase(); }
תגיות: , ,
תגובה אחת

הגדרה של FormBorderStyle עבור טפסים שהם MDI

יום שלישי, נובמבר 17, 2009

  בתפוז עלתה השאלה הבאה:   יש טופס אב ויוצרים בזמן ריצה מופעים של טפסי בן ומוספים אותם לאב - במקרה שהמאפיין FormBorderStyle מוגדר כ - none על טופס הבן, מה שיקרה בפועל שלשנייה אחת יראו את המסגרת ואז זה יעלם - השאלה כיצד מתפטרים מהמסגרת לתמיד.   נניח שהקוד נראה ככה:   private void button1_Click(object sender, EventArgs e){    Form2 f = new Form2();    f.MdiParent = this;    f.Show();}   למעשה הבעייה נובעת מכך ש - windows מציירת כל הזמן את כל הפקדים שעל המסך - ולכן הדרך היחידה לא לראות את המסגרת היא להגיד למערכת ההפעלה להפסיק לצייר את הטופס עד שהכל יסתדר במקום.   כדי לעשות את זה נוכל...
2 תגובות

String extension – IsNullOrEmpty – ToEnum (Enum.Parse)

יום חמישי, ספטמבר 24, 2009

  אני משתמש די בקביעות עם שני extensions ל - string, וחשבתי לשתף אותם.   הראשון: בדיקה האם מחרוזת אינה null או ריקה בדרך כלל מתבצעת בצורה הבאה string str; if (!string.IsNullOrEmpty(str)) { }   היה הרבה יותר נחמד לולא היינו יכולים לשאול על ה - str - אבל מה לעשות שאולי ה - str הינו null (וזה שאלה מכשילה).   השני: המרה ממחרוזת ל - enum מתבצעת בדרך כלל ככה:   enum NyEnum {     One,     Two } NyEnum data = (NyEnum)Enum.Parse(typeof(NyEnum), "One");     ולכן כתבתי את המחלקה הבאה:   namespace System {     public static class StringExtension     {         public static bool IsNullOrEmpty(this string value)         {             return string.IsNullOrEmpty(value);         }           public static T ToEnum<T>(this string value) ...
3 תגובות

DataReader.GetValueOrDefault –> Extension for Extension

יום ראשון, ספטמבר 6, 2009

  בהמשך לפוסט שהראה איך לקבל ערכי ברירת מחדל עבור עמודות שיכולות להיות NULL בבבסיס הנתונים.   שלח לי חבר יקר (בניהו) את ההצעה הבאה:     public static T GetValueOrDefault<T>(this DbDataReader reader, int index) {     if (Convert.IsDBNull(reader))     {         return default(T);     }       return (T)reader; }   public static T GetValueOrDefault<T>(this DbDataReader reader, string name) {     if (Convert.IsDBNull(reader))     {         return default(T);     }       return (T)reader; }
אין תגובות

DataReader.GetValueOrDefault –> Nice Extension

יום שישי, ספטמבר 4, 2009

    בעבר כתבתי את הפוסט הזה על Extension ל - DataReader - שיודע לייצר אובייקט מכל שורה ב - reader.   כאן אני אראה עוד תוספת נחמדה ל - DataReader.   הרבה פעמים אנחנו יכולים לקבל NULL מה - reader, ואנחנו חייבים לבדוק בכל פעם האם זה לא DBNull, בעזרת ה - Extension הבא, הקוד יהיה יותר קריא.   (הראשון עבור int והשני עבור string)   public static T GetValueOrDefault<T>(this DbDataReader reader, int index, T defaultValue) {     if (Convert.IsDBNull(reader))     {         return defaultValue;     }       return (T)reader; }   public static T GetValueOrDefault<T>(this DbDataReader reader, string name, T defaultValue) {     if (Convert.IsDBNull(reader))     {         return defaultValue;     }       return (T)reader; }     והשימוש יהיה בצורה הבאה:   while (reader.Read()) {     Category...
תגיות: , ,
תגובה אחת

System.Web.UI.Control.FindControl => FindControlRecursive

יום רביעי, ספטמבר 2, 2009

  אחד הדברים הכי מעצבנים במתודה FindControl ב - Asp.Net, שהוא יודע לחפש רק באוסף הפקדים שלו, אבל הוא לא יודע לחפש פנימה, כלומר - אם יש לי טבלה שבאחד מהעמודות יש פקד שאני מחפש, אני לא אוכל למצוא את זה באמצעות FindControl על הטבלה, רק באמצעות FindControl על העמודה הספציפית שבה הפקד נמצא.   כדי לפתור את זה, אפשר להשתמש במתודה הזאת. (היא מוגדרת כ - Extension על Control, אבל כמובן שאפשר למחוק את המילה this, וזה יהפוך למתודה סטטית רגילה)   public static Control FindControlRecursive(this Control root, string id) {     if (root.ID == id || root.ClientID == id || root.UniqueID == id)     {    ...
אין תגובות

DataReader Helper Part 2

יום חמישי, אפריל 16, 2009

  בהמשך לפוסט הקודם שכתבתי על איך להביא נתונים מטבלה שממופה לאוביקט (אחד לאחד - עבור כל עמודה יש מאפיין עם אותו שם).   אז כמו שכתב רותם, ברגע שזה לא בדיוק אחד לאחד, זה לא יעבוד.   אז הנה הגירסא המורחבת של הפיתרון, (אפשר להוריד אותו מכאן.) (אולי כדאי להעלות אותו גם ל Code Plex, מה אתם אומרים ?)   וכמובן על ידי attribute,   ואם כבר הרחבתי את הפיתרון, אז שיניתי את המתודה ל Extension.     הנה הקוד של ה attribute:   public class MapAttribute : Attribute {     public string DatabaseColumn { get; set; }     public bool UseMap { get; set; }       public MapAttribute()     {         UseMap...
5 תגובות