שמואל, נשמח אם תעדכן איך התקדמו העניינים.
פורסם במקור בפורום CODE613 ב13/01/2014 12:19 (+02:00)
שמואל, נשמח אם תעדכן איך התקדמו העניינים.
פורסם במקור בפורום CODE613 ב13/01/2014 12:19 (+02:00)
איפה הקשיים והסיבוכים הגדולים נמצאים? זה רק באדו ?
לא לא עד כדי כך. מה שאתה כעת עוסק בשבילי זה סיבוך גדול, אתה בטח מגדיר את זה כהרבה חומר, אתה טיפוס אופטימי שלא מפחד מעבודה (זה גם חיסרון! :)) חוץ מזה פה בפורום יש כרישים בתחום המסד, וגם בתחום אסטרטגיית הקליינט, מה שנשאר זה בעיקר ADO.NET, וזה גם בע"ה לא רציני.
פורסם במקור בפורום CODE613 ב09/01/2014 18:22 (+02:00)
אתה לא מדבר על DataSet אלא על ההתנהגות של הVS.
הוא פשוט משתמש מאחורי הקלעים בCommandBuilder, הכלי הזה יוצר שאילתות בחירה+מחיקה+עדכון+הוספה אוטומטית לפי סכמת הטבלה.
למעשה הוא ממש עובד כמו גולם אבל זה חוסך שגיאות הקלדה וקוד עם לולאות לעבודה זהה.
אבל, הוא לא נביא. וזה אומר שכמקור הנתונים מורכב משתי טבלאות, מאיפה לו לדעת מה לעשות במקרה הוספה? מחיקה? עדכון? אפשר להתווכח עם השאלה שאני מציב, אבל זה המצב. אם אתה רוצה תוכל להוסיף ידנית בחלון הדיזיינר של הDS פקודות SQL (בבחירת האדפטר מתחת לכל טבלה, במאפיינים. בגירסאות טרם 2013 יש עורך שאילות מעולה). כמו"כ תוכל תמיד בקוד לעשות מה שבא לך.
בברכת אקלום קל בתסבוכת ADO.NET... אני עצמי מסובך בזה מאוד, וזה כבר שנים...
פורסם במקור בפורום CODE613 ב09/01/2014 17:27 (+02:00)
אם ככה הקוד צריך לעבוד מעולה, מה הבעיה בו?
בהתחלה לא הבנתי אותך כי חשבתי שאתה רוצה לחבר את הכרטסות לאנשי קשר עצמם:
@שמואל
יש לי ליסט (לצורך העניין אנשי קשר) ואני רוצה שלכל איש קשר יפתח כרטיסיה חדשה בטאבקונטרול
מה הדרך?
ככה גם נראה מהאיגוד FName וLName שהכרטסת מתייחסת לאדם ולא לעיסקה.
וכעת אתה כותב:
@שמואל
אני רוצה עבור כל עיסקה כרטיס בודד מתוך טאבקונטרול
פורסם במקור בפורום CODE613 ב14/01/2014 13:08 (+02:00)
זה הקוד הוא מחובר לאייטמסורס של כל איש קשר נוכחי
לא הבנתי.
כמובן גם שלא הבנתי את הDataContext ואת הItemsSource.
פורסם במקור בפורום CODE613 ב14/01/2014 12:27 (+02:00)
תראה מה שניסית.
פורסם במקור בפורום CODE613 ב14/01/2014 11:31 (+02:00)
@דוד ל.ט.
כעת אתה צריךא. ליצור קולקשיין ויו בריסורס,
ב. לחבר את הitemSource של הטאב קונטרול לקולקשיין הזו.
ג. לטפל בקוד של לחיצה כפולה/בודדת בליסט בוקס, שם לדעת איזה אייטם נלחץ ולהוסיף אותו לקולקשיין הנ"ל.א. קודם כל כבר יש לי את הקולקשין של המחלקה של הביינדינג האם אני צריך דווקא קולקשין ויו?
ב. מה שקורה שהוא יוצר לי אייטם לכל אחד בצורה רציפה בעצם כמו טאב קונטרול חדש לכל רשומה
וא"ת, למה צריך קולקשיין ויו, בא נשתמש בקולקשין של המחלקה של הביינדינג?
וי"ל, דאם משתמשים באותו המקור, מה שקורה שהוא יוצר לי אייטם לכל אחד. והרי אנו רוצים שהוא יציג רק חלקם (נאמר מה שנבחר וכיוצ"ב).
יש לדעת שקולקשיין ויו לא באמת מכיל עצמים כפי שכתבתי בעבר: http://tchumim.com/topic/211
אז עם רוצים להציב לו ערכים או שיצורים כל פעןם קולקשייין ושמים במאפיין Source, או שמחברים אותו לאותו המקור של הליסטבוקס ומוסיפים לו פילטר.
פורסם במקור בפורום CODE613 ב13/01/2014 12:51 (+02:00)
דוד למה אתה לא ממליץ על הטאב קונטרול של כרום, שם יש אפשרות לעשות הכל בכל מכל כל, זה ממש מתנהג כמו כרום כולל גרירה אחורה וקדימה, לחצן איקס לסגירה, ואפשר להוסיף שם מה שרוצים.
כבר דובר על זה בפוסט אחר.
אני ממליץ בחום אבל זה לא נקודת השאלה,
אכן נראה שהוא יצטרך את זה אבל שאלתו נסובה על תבנית לכל כרטסת, וצורת מילוי הכרטסות שלא ע"י קוד.
פורסם במקור בפורום CODE613 ב09/01/2014 12:59 (+02:00)
קודם תצייר כרטסת אחת עם הבינדינגים (כאילו הדטה קונטקסט של הכרטסת הוא כרטיס אחד מתוך הליסט) המתאימים איך שאתה צריך.
אח"כ תשים את כל הTabItem שיצרת בתוך DataTemplate שאותה תשים בTabControl.ItemTemplate בדיוק כמו שעושים עם ListBox.
כעת אתה צריך
א. ליצור קולקשיין ויו בריסורס,
ב. לחבר את הitemSource של הטאב קונטרול לקולקשיין הזו.
ג. לטפל בקוד של לחיצה כפולה/בודדת בליסט בוקס, שם לדעת איזה אייטם נלחץ ולהוסיף אותו לקולקשיין הנ"ל.
זה אפשרות אחת, יש עוד כמה בהתאם לצרכים, אתה כבר לאט לאט תמצא עוד אלטרנטיבות.
פורסם במקור בפורום CODE613 ב09/01/2014 12:33 (+02:00)
הגרירה והשחרור נותנים תוצאות נחמדות אך שקשה לי לשער מה קרה שם.
עקוב אחר מקור הנתונים של הקומבובוקס (אני משער שזה עובד דרך קולקשיין), וודא שהוא מטבלת הקטגוריות.
כמו"כ קבע לSelectedValue את הקטגוריה הנוכחית.
ובדיוק מה ששמואל כתה הDisplayValue שים שם שם סטרינגי, שתואם בדיוק לשם השדה (שאתה רוצה שייצג מבחינת תצוגתית) של שבטבלת הקטגוריות.
פורסם במקור בפורום CODE613 ב09/01/2014 13:20 (+02:00)
בדיוק מה שאמרתי. הליסט בוקס החיצוני מכיל איבר בודד, שהוא הליסט הפנימי.
זה מה שאתה רוצה? ליסט של פריט אחד? בודאי שלא. ואם תנסה למלאות את הליסט בבינדינג, א. זה לא ייראה בכלל כמו שעיצבת את הבודד, ב. זה סותר את עבודת המילוי הידני שלך באייטם אחד.
אלא אתה רוצה שכל איבר ייראה בדרך של האיבר הבודד שעשית. בשביל זה יש ItemTemplate
אם הבנתי מה אתה רוצה שיקרה לבסוף, זה הקוד המתאים:
<ListBox ItemsSource="{Binding hoksForSelactedContact}" Width="150" Height="150">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding nameOwnerOfTheAccount}"/>
<TextBlock Text="{Binding blaBla}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
פורסם במקור בפורום CODE613 ב09/01/2014 11:38 (+02:00)
הבעיה היא שיש אובייקטים בתוך הליסט.
תראה את הXAML של הליסט, אם זה לא נראה לך הבעיה.
פורסם במקור בפורום CODE613 ב09/01/2014 11:01 (+02:00)
אני עובד קשה. אני גם לוקח מהלקוח על זה (אין לי לקוחות :lol: ).
אבל התוצאה בהתאם.
זה כמו "עבודת יד" :)....
הסיבה למה לא, בגלל שהוא לא מספיק חכם. הוא לא מבין שכבר מילאתי את הDataTable במקום אחר ובכלל אני צריך שיפנה לDT קיים ועוד.
אפשר להשתמש ולמחוק את הקשקושים המיותרים אבל התרגלתי מאוד לזוית ראיה שבחלון אחד לא מופיעים יותר מ5 מאפיינים בערך. המשתמש בתוכנה שלי אין לו הרגשה של עריכת שורה. ממילא זה לא עבודה קשה כ"כ. אני עושה זאת במהירות רבה וזה לא שווה עזרה ממוחשבת...
פורסם במקור בפורום CODE613 ב09/01/2014 17:45 (+02:00)
יפה, אז גם את זה כבר יש מוכן
ומה לגבי קשרי גומלין, זה יכול להיות מובנה בתוך המסד או רק בתוך הדטה-סט, והאם אפשר להציג את הרשימה מהטבלה המקושרת בתוך עמודת קומבו בלא להזדקק ל EF ?
התשובה חיובית על הכל.
פורסם במקור בפורום CODE613 ב09/01/2014 17:32 (+02:00)
עדיין לא כ"כ מובן למה מייקרוסופט בחרו לפצל את הDataSet ל 3 אובייקטים שונים, (אני מדבר על המרכזיים, ולא על המימוש מאחורה), ולא להשתמש באובייקט אחד כמו בASPX (אני לא מדבר על LTS, אלא אפילו על אובייקט המקשר ישירות לSQL SERVER ואפילו לאקסס.
:lol:
שוב אתה עם ההבדל...
אבל יש הרבה כלים שכוללים את כל הכלים הללו ותת הכלים שבתוכם בצורה מאוד שקופה למתכנת. טוב? תלוי למי..
פורסם במקור בפורום CODE613 ב09/01/2014 17:31 (+02:00)
אגב ראיתי דבר מאוד יפה שמאוד מקל על יצירת פקדים להצגת הנתונים וזה ממש כמו באקסס אפשר לגרור את הטבלה מתוך ה Data Sources window ולשחרר ב WPF Designer והוא כבר יצור לבד דטה-גריד או פקדים מסודרים יעויין כאן.
בקשר לגרירה מחלון הDataSource לטופס, אני בכוונה לא מזכיר אפי' את האופציה הזו.
לרוב המתכנתים, זה ממש מבלגן כשמישהו דוחף להם "הנחות" מתחת לאף.
אבל זה נכון שכשיודעים לעבוד עם זה זה נוח (אני אישית לא משתמש בזה בכלל).
פורסם במקור בפורום CODE613 ב09/01/2014 17:29 (+02:00)
שכחתי דבר חשוב.
dbCommandBuilder.
פורסם במקור בפורום CODE613 ב08/01/2014 18:24 (+02:00)
יש הרבה גישות לעבודה עם מסד בדוט נט.
כל הגישות משתמשות בADO.NET שזו הטכנלוגיה לגישה לנתונים בדוט נט - לא משנה מה סוג המסד (MSSQL, MySql, ORACLE, ACCESS, SqlLite ועוד הרבה).
הדרכים הם כאלה:
3 ו4 שמתי כוכבית, כי הם לא זמינים לכל מסד, כי צריך לממש אותם לכל אחד (כמו רוב הקומפוננטות בADO.NET, המימוש נעשה בידי חברת המסד או מישהו אחר), מיקרוסופט מימשו לMSSQL בלבד, צדדים שלישיים שונים מימשו לאחרים כמו SqlLite.
לאקסס (משום מה :)) אף אחד לא מימש אותם.
3 ו4 מתייחדים בכך שהם מאוד עיליים, אין בכלל גישה מפורשת בקוד לנתונים! כמו"כ הם מאפשרים להתחיל את המערכת בצד המודל או הקוד, וממנו ליצור את מבנה הDB ולא להיפך כמסורת שהייתה.
דרך נכונה ופשוטה, אולי יש. גנרי, אם הכוונה שהתוכנה תידע להתנהג יפה עם מסד שנולד אחריה, זה תלוי בך...
מה נכון ופשוט? אז 3,4 מחייבים את האפליקציה להכיר את המסד בזמן עיצוב. וזה ממש לא גנרי.
1 (למעט TypedDataSet) ו2 יכולים לתת לך את מה שאתה רוצה.
DbConnection = אבסטרקטי. מחלקת חיבור, קישור לשרת/קובץ המתאים עם פרמטרי התחברות נדרשים ואופציונליים. מחרוזת החיבור היא סטרינג, ויש פקודת פתיחה וסגירה של ההתקשרות. כוללת פקודה בשם GetSchema, שנותנת כל מה שניתן לדעת על המסד (טבלאות שאילתות וכו').
DbCommand = אבסטרקטי. מחלקת פקודה, מאפשרת לשלוח למסד פקודה (כמו SELECT וכו'). זה כולל פקודה שאינה שאילתה, או פקודת שאילתה שמחזירה ערך בודד או ערכים רבים שנקראים ע"י אובייקט Reader שיבוא בסמוך.
DbDataReader = אבסטרקטי. מחלקה שקוראת שורות מתוצאות פקודה שהורצה לשרת. הקריאה מבוצעת ע"י פקודה שמחזירה מערך אובייקטים עבור שורה בודדת. הפקודה מחזירה ערך הוליאני חיובי במקרה והגיעה שורה (לא נגמרה הרשימה).
DataAdapter = (לא אבסטרקטי ממש, אבל כמעט... כי בכל מסד משתמשים בייעודי לצורך התאמה וביצועים משופרים) מחלקה שמתווכת בין כל האובייקטים הנ"ל לבין האובייקט DataSet שיובא בסמוך. תיווך זה חוסך לולאות וכדומה (וזה חיסכון ענק ונוח), לא מעבר לכך.
DataSet = מחלקה שמייצגת אוסף טבלאות שכולן ב"אויר". הנתונים בטבלה חיים למעשה בזיכרון החי. המחלקה דומה למסד עם אוסף טבלאות - (מחלקת DataTable מחלקה זו נראית ממש כמו טבלה: יש לה עמודות (מחלקת DataColumn), שורות (מחלקת DataRow) אילוצים וקשרים ועוד), קשרים בין טבלאות, ובעיקר היא (וגם הDataTable בזכות עצמה) "כפפה ליד" לDataAdapter האמור לעיל, ולכן היא פועלת איתו בצורה ממש מקילה, היא זוכרת איזו שורה הייתה במקור, איזה שונתה, איזו התווספה, וע"י זה הDataAdapter יודע איזו פקודה להפעיל אם בכלל לכל שורה.
DbCommandBuilder = אבסטרקטי. מחלקה שיוצרת על פי סכמת טבלה את כל הCommand של פעולות CRUD (ר"ת Create, read, update and delete). צריך לשאוב ממנה אחת אחת מהללו, והיא עושה זאת יפה מאוד כל עוד העסק לא מורכב.
יש עוד אובייקטים, אבל התייחסתי לעיקריים.
שלושת האובייקטים האחרונים הם מן של גישה עילית לנתונים, בשביל לחסוך שורות קוד חוזרות בכל מסד.
איתם אתה יכול לבנות מחלקות גנריות לכל מסד שמומשו עבורו המחלקות הדרושות.
טכנלוגיות הLTS והEF משתמשות מאחורי הקלעים בשלוש הראשונות.
פורסם במקור בפורום CODE613 ב08/01/2014 12:40 (+02:00)
יש לך 4 אפשרויות של נעלמים:
שיעור המעמ באחוזים (כאשר סכום המעמ ידוע, והסכום לפני או אחרי גם כן ידועים)
סכום המעמ (כאשר הכולל והאחוזים ידועים)
סכום לפני מעמ (כאשר הכולל והשיעור ידועים)
סכום כולל מעמ (כאשר הסכום לפני והאחוזים ידועים)אז ההמלצה שלך זה 4 פונקציות???? נשמע קצת יותר מבלבל לא?
ברור. תמיד פונקציה לכל שבריר מטרה, ואתה הראשון שאמור לומר ככה...
אם כי ממש חבל לעשות פונקציה לרוב המקרים. זה שלוש מילות קוד.
פורסם במקור בפורום CODE613 ב07/01/2014 16:57 (+02:00)
זה די מבלבל שתי פעולות בפונקציה אחת.
ראוי לעשות פונקציה לכל וריאציה.
פורסם במקור בפורום CODE613 ב07/01/2014 16:10 (+02:00)