none
עבודה אם Gridview כאשר מקבלים את הנתונים מXML RRS feed

  • שאלה

  • שלום כלום. אני די חדש בנושא הפיתוח ב.net אז אני ינסה לקבל פה מעט עזרה
    אז ככה אני מקבל קובץ XML (בצורת string) וקורא אותו לתוך dataset , משם אני מעביר את כל התוכן (בצורה לא יעילה ולא טובה) לתוך GridView בעזרת הפקודה הבאה : 
    GridView1.DataSource = dataset.Tables[1].DefaultView

    עכשיו כמה דברים שאני צריך בהם עזרה :
    1. האם יש לי צריך לפלטר את הטבלאות שאני רוצה להציג ואת הטבלאות שאני לא רוצה להציג (לדוגמא אני לא רוצה את ברקוד המוצר שיוצג בתוך העמוד)?

    2. התוצאה שאני מקבל פה היא בעצם כל הנתונים בstring יש לי נתונים בתוך הXML שאני רוצה להציג את התוכן של הstring שלהם (לדוגמא אייקון, עכשיו אני מקבל את הכתובת של האייקון ולא את האייקון מוצג בתוך הטבלה), האם יש דרך להציג את התוכן של הטקסט?
    3.האם אתם חושבים שיש דרך יותר יעילה מGridview להציג את הנתונים האלו (בעיקרון מדובר ברשימה של הודעות RSS שאני לוקח מAPI) לדף אינטרנט? 

    כל הקוד מאוחר נכתב בC#

    תודה לכולם מראש על העזרה

    בתודה שי. 

    יום שלישי 30 אוגוסט 2011 12:27

תשובות

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

    ליעילות לא מגיעים בשימוש בקונטרולים מוכנים בדרך כלל.

    מערך דו מימדי פשוט הרבה יותר יעיל וזול מגריד אבל העבודה איתו תחייב לכתוב קוד שבגריד כבר כתוב לך במחלקה מאחורי הקלעים (אם אתה רק גורר אובייקטים אז זה מאחורי הקלעים)

    תשכח את סעיף 1 כי אתה רוצה לעבוד בשיטות של WEBFORM אני מניח ולהעזר בקונטרולים המוכנים

    2. אם לא היית טוען את הנתונים בצורה זו היית יכול לעבוד יותר נכון לפי מודל האובייקטים. היית יכול להגדיר אובייקט (מחלקה) התואמת לרשומה בגריד שלך.

    אתה יכול לייצר אוסף מכל מני סוגים כגון :
    IEnumerable<YourObject>

    לאוסף זה תכניס את כל הנתונים מהמסד נתונים שלך

    מכיוון שזה אוסף של אובייקט מסויים הרי שכל הנתונים יהיו מסוג מתאים ולא שרשראות

    וכל מה שנשאר לך זה לבצע FILL לגריד מנתונים אלו ישירות

    * שימוש ב EF אן LINQ 2 SQL היה ]ותר לך את הבעיה מייד כשה ORM היה כבר מהווה שכבת החיבור בין המסד נתונים לאובייקטים שלך. זה כמובן מחייב ללמוד EF ושימוש ב LINQ

    ** אפשרות נוספת מהירה יותר ופחות אידאלית היא פשוט לעשות שימוש בפונקציה במקום להציג את הנתונים כפי שהם בגריד ניתן להציג תוצאה של פונקציה בגריד וככה אתה יכול להציג תמונה למשל..

    כנס לקוד של הגריד ופתח אותו לעריכה

    במקום שימוש ב
    <%# Eval("EmployeeID") %>

    אתה יכול לעשת שמוש בפןנקציה שתחזיר שרשרת של קוד תמונה ב HTML

    <%# MyFunc("EmployeeID") %>

    3. הכל אפשרי במחשבים!
    לעולם אל תשאל אם זה אפשרי כי התשובה תמיד כן
    תשאל כיצד מבצעים ולא האם זה אפשרי
    * לא הבנתי מה אתה רוצה לבצע בדיוק ומה לפלטר אבל אולי הפתרון של פונקציה יכסה לך את זה גם כן?


    • נערך על-ידי pituachMVP, Moderator יום ראשון 04 ספטמבר 2011 17:26
    • סומן כתשובה על-ידי Meir Pinto יום ראשון 18 ספטמבר 2011 12:36
    יום ראשון 04 ספטמבר 2011 17:25
    מנחה דיון

כל התגובות

  • 1. מהיכן החלטת שגריד הוא משהו שקשור ליעילות?

    ממתי הקונטרולים של מייקרוסופט נועדו ליעילות? הם בסך הכל נועדו לקצר את זמני הפיתוח. אם אתה מחפש יעילות תזרוק אותם הציגה ותעבור לעבודה ישירה (MVC זו דרך טובה להגיע ליעילות למשל)

    2. אם כבר בחרת לעבוד עם XML אז במקום לקרוא אותו כטקסט תעבוד איתו כ XML ותקבל נוחות ואולי יעילות (ביחס לזמן הפיתוח). אתה יכול לעבוד עם אובייקט System.Xml.XmlDocument למשל

    אני ממליץ לך לחפש מעט בגוגל על המחלקהSystem.Xml ומתודות שונות היושבות תחת. זה יאפשר לך לעבוד עם XML בקלות (כשאובייקט מזוהה כ XML ניתן להפוך אותו בשורת קוד אחת לטבלה)

    אם תציג לנו קוד נהיה גם יותר "חכמים" לגבי הבעיה או המורכבות מולה אתה עומד.

    בכל מקרה כאמור השלב הבא לדעתי זה לקרוא ולתרגל עבודה עם XML כאוביקט XML ולא כשרשרת

    יום שלישי 30 אוגוסט 2011 16:04
    מנחה דיון
  • תוכל לפרט באיזה טכנולוגית UI מדובר?

    ASP.NET, WinForms; WPF, Silverlight, אחר?

     


    Arik Poznanski
    blogs.microsoft.co.il/blogs/arik

    יום רביעי 31 אוגוסט 2011 20:25
  • היי אריק

    מדובר בסביבת asp.net

    תודה , שי 
    יום חמישי 01 ספטמבר 2011 06:48
  • תבדוק מה שרשמתי לך מעל

    * העיקרון שרשמתי נכון בכל טכנולוגיה של דוטנט והתזכורת של MVC זה ספציפי ל asp.net
    ** הערה: asp.net התפצל ל MVC ולטכנולוגיה הישנה יותר WEB FORM

    יום שישי 02 ספטמבר 2011 22:19
    מנחה דיון
  • אז קצת הסברים על מה שאני עושה :

    נתחיל מי זה שאני מקבל מAPI חיצוני תגובה בJSON , את התגובה אני תוחם בתוך string ולא string הזה אני עושה מעבר לXML בצורה הבאה : 
           
          string json = "{Json:";
                json += DownlodUrl(request2);
                json += "}";
    
                XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(json);
    
                string xml = GetXmlString(doc);
    


    לאחר מכן אני יוצר dataset(כדי להכניס אליו את הנתונים) וכותב אליו את הXML  בצורה הבאה : 

     doc.LoadXml(xml);
                StringReader sr = new StringReader(xml);
                DataSet dataset = new DataSet();
     dataset.ReadXml(sr);
                DataGrid dg = new DataGrid();
                dg.DataSource = dataset;
                System.IO.StringWriter swXML = new System.IO.StringWriter();
                
                dataset.WriteXml(swXML);
    


    ואחרי כל זה אני מעביר את התוכן שיש לי בdataset לתוך ה gridview : 

     GridView1.DataSource = dataset.Tables[1].DefaultView;

    שוב הבעיות והשאלות שיש לי :

    1. האם זה האופן היעיל ביותר לעשות דבר כזה?
    2. שהתוצאה מוצגת על הgridview אני מקבל הכל בstring (לדוגמא במקום לראות אייקון אני מקבל את הכתובת (URL) של האייקון ), האם יש דרך שבא אני יכול להציג בתוך gridview(או משהו אחר) תוכן שהוא לא רק string?
    3. אני רוצה לפלטר (לא להציג) כמה טבלאות, האם זה אפשרי?

    תודה רבה לכולם על העזרה. שי 

    יום ראשון 04 ספטמבר 2011 08:24
  • 1. כמו שכבר אמרתי לך גריד לא נועד ליעילות אלא לנוחות, קיצור זמני פיתוח ולאפשר לכל ילד שרוצה לגרור עם העכבר משהו משמאל לימין בלי לכתוב שורת קוד אחת.

    ליעילות לא מגיעים בשימוש בקונטרולים מוכנים בדרך כלל.

    מערך דו מימדי פשוט הרבה יותר יעיל וזול מגריד אבל העבודה איתו תחייב לכתוב קוד שבגריד כבר כתוב לך במחלקה מאחורי הקלעים (אם אתה רק גורר אובייקטים אז זה מאחורי הקלעים)

    תשכח את סעיף 1 כי אתה רוצה לעבוד בשיטות של WEBFORM אני מניח ולהעזר בקונטרולים המוכנים

    2. אם לא היית טוען את הנתונים בצורה זו היית יכול לעבוד יותר נכון לפי מודל האובייקטים. היית יכול להגדיר אובייקט (מחלקה) התואמת לרשומה בגריד שלך.

    אתה יכול לייצר אוסף מכל מני סוגים כגון :
    IEnumerable<YourObject>

    לאוסף זה תכניס את כל הנתונים מהמסד נתונים שלך

    מכיוון שזה אוסף של אובייקט מסויים הרי שכל הנתונים יהיו מסוג מתאים ולא שרשראות

    וכל מה שנשאר לך זה לבצע FILL לגריד מנתונים אלו ישירות

    * שימוש ב EF אן LINQ 2 SQL היה ]ותר לך את הבעיה מייד כשה ORM היה כבר מהווה שכבת החיבור בין המסד נתונים לאובייקטים שלך. זה כמובן מחייב ללמוד EF ושימוש ב LINQ

    ** אפשרות נוספת מהירה יותר ופחות אידאלית היא פשוט לעשות שימוש בפונקציה במקום להציג את הנתונים כפי שהם בגריד ניתן להציג תוצאה של פונקציה בגריד וככה אתה יכול להציג תמונה למשל..

    כנס לקוד של הגריד ופתח אותו לעריכה

    במקום שימוש ב
    <%# Eval("EmployeeID") %>

    אתה יכול לעשת שמוש בפןנקציה שתחזיר שרשרת של קוד תמונה ב HTML

    <%# MyFunc("EmployeeID") %>

    3. הכל אפשרי במחשבים!
    לעולם אל תשאל אם זה אפשרי כי התשובה תמיד כן
    תשאל כיצד מבצעים ולא האם זה אפשרי
    * לא הבנתי מה אתה רוצה לבצע בדיוק ומה לפלטר אבל אולי הפתרון של פונקציה יכסה לך את זה גם כן?


    • נערך על-ידי pituachMVP, Moderator יום ראשון 04 ספטמבר 2011 17:26
    • סומן כתשובה על-ידי Meir Pinto יום ראשון 18 ספטמבר 2011 12:36
    יום ראשון 04 ספטמבר 2011 17:25
    מנחה דיון
  • היי,

    אשמח אם תוכל/י לעדכן אותנו בסטטוס השאלה שלך.

     

    במידה וקיבלת תשובה מתאימה לשאלתך, יש לסמן את התשובה המתאימה ע"י לחיצה על "סמן כתשובה" ליד סימון ה V הירוק

    אם לא קיבלת תשובה, מומלץ לספק פרטים נוספים אודות הבעיה, פרטי לוג, צילומי מסך וכו'

    על מנת להעלות תמונה לפורום ניתן להעזר במדריך להעלאת תמונה.


    אם תגובתי פתרה את בעייתך - לחץ/י, על "סמן כתשובה" ליד סימן ה V הירוק.

    על מנת להעלות תמונה לפורום ניתן להעזר במדריך להעלאת תמונה
    מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים והעשרת הידע הקשור בטכנולוגיות ובמוצרים של Microsoft. תוכן זה מתפרסם כפי שהוא והוא אינו מעיד על כל אחריות מצד מיקרוסופט.
    יום חמישי 15 ספטמבר 2011 12:51