ניווט

    תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    • מקצועות
    חוקי הפורום

    wpf

    תכנות
    2
    8
    363
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגב כנושא
    התחבר בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • E
      edenbelosh נערך לאחרונה על ידי dovid

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

      foreach (PropertyInfo item in typeof(BE.Tester).GetProperties())
      {
          TypeConverter typeConverter = TypeDescriptor.GetConverter(item.PropertyType);
          object convertValue = typeConverter.ConvertFromString(element.Element(item.Name).Value); 
          item.SetValue(tester, convertValue);
      }
      
      תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • dovid
        dovid נערך לאחרונה על ידי dovid

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

        dovid תגובה 1 תגובה אחרונה תגובה ציטוט 2
        • dovid
          dovid @dovid נערך לאחרונה על ידי

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

          תגובה 1 תגובה אחרונה תגובה ציטוט 2
          • E
            edenbelosh נערך לאחרונה על ידי dovid

            XElement testerRoot;
            string testerPath = @"testerXml.xml";
            
            
            XElement traineeRoot;
            string traineePath = @"traineeXml.xml";
            
            
            XElement testRoot;
            string testPath = @"testXml.xml";
            
            XElement configRoot;
            string configPath = @"configXml.xml";
            
            private static int testNum = 0;
            
            testerRoot = new XElement("testers");
            testerRoot.Save(testerPath);
            
            
            traineeRoot = new XElement("trainees");
            traineeRoot.Save(traineePath);
            
            
            testRoot = new XElement("tests");
            testRoot.Save(testPath);
            
            configRoot = new XElement("TestNum");
            configRoot.Add(new XElement("TestNum", testNum));
            configRoot.Save(configPath);
            
            if (predicat == null)
            {
                return from item in testerRoot.Elements()
                       select ConvertTester(item);
            }
            
            return from item in testerRoot.Elements()
                   let s = ConvertTester(item)
                   where predicat(s)
                   select s;
            
            foreach (PropertyInfo item in typeof(BE.Tester).GetProperties()) {
                            if (item.Name != "Adress")
                            TesterElement.Add(new XElement(item.Name, item.GetValue(tester, null)));
                            else
                            {
                                XElement city = new XElement("city", tester.TesterAdress.City);
                                XElement street = new XElement("street", tester.TesterAdress.Street);
                                XElement BuildingNum = new XElement("buildingNum", tester.TesterAdress.BuildingNum);
                                XElement address = new XElement("Adress",street,BuildingNum,city);
                                TesterElement.Add(address);
                            }
            

            זה בערך חלק מהקוד רק של הטסטר

            תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • dovid
              dovid נערך לאחרונה על ידי dovid

              הבנתי.
              אי אפשר להכניס את הכתובת באוטומציה של מיפוי אוטומטי של שמות, צריך לטפל בה ידנית:

              var adress = new TesterAdressType();  //TesterAdressType replace with type of address...
              var el = element.Element("Adress");
              adress.City =  (string)el.Element("city").Value;
              adress.Street = (string)el.Element("street").Value;
              adress.BuildingNum = (string)el.Element("buildingNum").Value; //is string?
              tester.TesterAdress = adress;
              
              foreach (PropertyInfo item in typeof(BE.Tester).GetProperties())
              {
                  if(item.Name == "TesterAdress") continue;
              
                  TypeConverter typeConverter = TypeDescriptor.GetConverter(item.PropertyType);
                  object convertValue = typeConverter.ConvertFromString(element.Element(item.Name).Value); 
                  item.SetValue(tester, convertValue);
              }
              

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

              תגובה 1 תגובה אחרונה תגובה ציטוט 1
              • E
                edenbelosh נערך לאחרונה על ידי

                הוא רושם הפנייה לאובייקט לא הוגדרה למופע של אובייקט כשאני מגיעה לשורה adress.City = (string)el.Element("city").Value;

                dovid תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • dovid
                  dovid @edenbelosh נערך לאחרונה על ידי

                  @edenbelosh ובטוח הXML אליו את פונה נוצר על ידי הקוד שלך?

                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • E
                    edenbelosh נערך לאחרונה על ידי

                    כשאני עושה את הכתובת בהערה הוא שומר והכל בסדר רק כשמגיע לכתובת הוא רושם הפנייה לאובייקט לא הוגדרה אולי בגלל הvar

                    תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • 1 / 1
                    • First post
                      Last post
                    בא תתחבר לדף היומי!