
.\SQLEXPRESS. המרצה מסביר ש-"." פירושו המחשב הנוכחי.Fill) ומחזיר שינויים אליו (פונקציית Update).Fill, כך שהנתונים מופיעים לפני שהטופס מוצג.Update של ה-TableAdapter. מוחקים שורה דרך DataGridView, ושומרים שוב.EndEdit של ה-BindingSource, כדי לצאת ממצב עריכה. בלי זה, שינוי שלא נשלח עם Enter לא ייכלל בשמירה.Update של ה-TableAdapter.EndEdit לפני שמירה.הטקסט המלא של הדקות הראשונות בהרצאה «חיבור אפליקציה למסד נתונים» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לסדרת רכיבים שמסוגלים להציג מידע ממאגר נתונים חיצוני שנקרא דאטאבייס. עכשיו, יכול להיות שלא נחשפתם עדיין לנושא הזה של דאטאבייסס, ואיפה הנתונים יכולים להיות מאוחסנים ואיך אנחנו מנהלים אותם, אבל יש בפיתוח תוכנה ממש נושא נפרד שנקרא דאטאבייסס, מסדי נתונים.
מסד נתונים זה בעצם תוכנה חיצונית לאפליקציה שאנחנו בונים, שמסוגלת להחזיק כמות גדולה של נתונים, ומאפשרת לנהל אותם, לקרוא אותם, לשנות אותם, לכתוב אליהם, וככה נכון בעצם להחזיק הרבה נתונים שהאפליקציה שלנו רוצה להתעסק איתם.
לדוגמה, מוצרים, לקוחות, ספקים. השיטה הנכונה לעשות זה פשוט לשמור אותם באותה תוכנה חיצונית, כי הכי קל לנהל את הנתונים האלה, חיקה לגשת אליהם בו זמנית מכל מיני מקומות בתוכנית בצורה בטוחה.
הנתונים האלה לא יכולים סתם להיעלם מהמחשב כמו לדוגמה קובץ רגיל שאני עובד איתו. עכשיו כאשר אנחנו מציגים למשתמש את הממשק משתמש אנחנו נרצה הרבה פעמים להציג לו את אותם נתונים מאותה תוכנה חיצונית.
אנחנו נרצה לאפשר לו לערוך אותם לשנות אותם לשמור את השינויים שהוא ביצע. הנתונים שאנחנו הולכים להתעסק איתם כרגע או ליתר בדיוק הרכיבים האלה, אלו רכיבים שמאפשרים לגשת לנתונים ולקרוא אותם, לכתוב אליהם, להציג אותם.
בואו נראה איך עושים את זה. ראשית, כל הרכיבים האלה נמצאים בסרגל data. אנחנו ראשית נתעסק עם רכיב שנקרא data grid view, והוא מסוגל להציג לנו מה שנקרא grid, כלומר רשת של נתונים, מעין טבלה.
נתונים גם ככה מוחזקים במאגר נתונים בצורה של טבלאות, ממש כמו שפעם ראיתם אולי אקסל. כל טבלה מייצגת סוג אחר של מידע. לדוגמה, יש לנו טבלת מוצרים, אז כל שורה בטבלה מתארת מוצר אחד וכל תא בטבלה יכול לתאר מאפיין של מוצר.
לדוגמה, מחיר, שם מוצר, הנחה שיש עליו, סוג קטגוריה שהמוצר שייך אליה. כל שורה בטבלה זה מוצר נפרד וכך כל הטבלה מכילה את כל המוצרים שיש לנו.
אז אם אנחנו לוקחים פשוט את הרכיב הזה וזורקים אותו כאן, אנחנו רואים אוטומטית שנפתח לנו חלונית כזאת במשולש הזה, שדרך אגב אם אנחנו לוחצים עליו הוא יכול להיסגר, לחיצה נוספת הוא נפתח, וכאן אנחנו רואים שיש לנו אפשרות לבחור את מאגר הנתונים,
Choose a data source, כלומר מאיפה בדיוק אנחנו רוצים שהרכיב הזה יציג לנו את הנתונים. איזה טבלה בדיוק אנחנו רוצים להציג? אז אנחנו עכשיו צריכים ללכת וללחוץ על הלינק הזה Add Project Data Source.
בואו נוסיף מאגר נתונים. נפתח לנו ויזארד והוויזארד שואל אותנו מאיפה בדיוק אנחנו רוצים להביא את הנתונים. יש לנו פה כל מיני מקורות של נתונים. אנחנו נבחר בדאטאבייס שזה המקור הנפוץ ביותר.
אז אנחנו בוחרים דאטאבייס מבצעים נקסט. בחלונית הבאה עוד פעם יש לנו דאטאבייס קיים ואנחנו בוחרים שוב פעם דאטאבייס ואנחנו לא רוצים ליצור אחד חדש, אז בואו ניקח דאטאבייס, נבצע נקסט ויש לנו פה עוד חלון שבדרך כלל מה שכתוב כאן יהיה לכם ריק, אני פשוט התחברתי בעבר לדאטאבייס הזה, זוכר כל מיני התחברויות קודמות ואם החלונית הזאת ריקה עבורכם אתם צריכים ללחוץ על ניו
קונקשן לצורך התחברות חדשה. בואו נעשה את זה. ניו קונקשן, נפתח לנו טופס, וגם הטופס הזה זוכר שבעבר התחברתי למאגר נתונים מסוג Microsoft SQL Server, שזה בעצם תוכנת מסד הנתונים הנפוצה של מיקרוסופט.
אתם בטח מכירים תוכנות כמו Oracle לשמירת נתונים, שזה מסד נתונים של חברת Oracle. אתם מכירים אולי Access, Excel.
Microsoft SQL Server זה גם כן תוכנה שמסוגלת לאגור נתונים, כלומר מסד נתונים, מבית מיקרוסופט.
זאתי ספינת הדגל של מייקרוסופט בנוגע למסדי נתונים. אם עדיין לא יצא לכם לבחור מאגר נתונים במחשב שלכם, מה שאתם תראו זה את אותה חלונית שאנחנו רואים כשאני לוחץ על לחצן Change.
זאת החלונית בעצם הראשונה שאתם תראו אם עדיין לא בחרתם סוג מסד נתונים. ואז אם יש לכם את מייקרוסופט SQL Server מעודכן לכם במחשב, אתם תראו את האפשרות לבחור במסד הנתונים הזה.
אתם יכולים לראות שיש לי פה גם אפשרות לבחור את access ועוד כל מיני סוגים שונים של מאגרי נתונים. אז אנחנו בוחרים את Microsoft SQL Server, מבצע אוקיי, ועכשיו המערכת שואלת אותי, רגע, באיזה מחשב נמצא מסד הנתונים שלך?
כי מסד נתונים לא חייב להיות ספציפית במחשב שלי, הוא יכול להיות במחשב אחר ברשת. אז אני צריך לתת פה את השם של המחשב, השם הרשתי של המחשב, שבו נמצא מאגר הנתונים.
אם מאגר הנתונים נמצא באותו מחשב נוכחי שאני כרגע משתמש איתו אז אנחנו לוחצים נקודה. אם מאגר הנתונים נקרא sql server express והוא מסד נתונים חינמי שניתן להוריד מאתר מייקרוסופט אז אנחנו לוחצים נקודה /sql express וזה בעצם ה-server name שדרכו visual studio תדע לאן בדיוק להתחבר.
נקודה מציין להתחבר למחשב הנוכחי ולחפש שם את הדאטאבייס ו-SQL Express מציין שזה סוג של מסד נתונים חינמי. אוקיי, אם מסד הנתונים שלנו מכיל יוזרנם ופסוורד לצורך הגנה מפני כניסה של אנשים לא מורשים, אנחנו נאלצים להכניס את היוזרנם והפסוורד.
אנחנו הולכים להתחבר למסד נתונים חינמי שנמצא אצלי במחשב, שניתן להוריד ממיקרוסופט, ומסד הנתונים הזה נקרא Northwind.
מסד הנתונים Northwind מתעסק בחברה דמיונית של יצוא ויבוא של מוצרי מזון ייחודיים מכל העולם. למסד נתונים Northwind, שהוא חינמי, אין יוזרניים ופסוורד, ולכן אני בוחר את האופציה הראשונה: use Windows Authentication ולא use SQL Server Authentication, שזה בעצם
אומר אין שם משתמש וסיסמה לדאטאבייס עצמו לצורך גישה אליו. הדבר הבא שאנחנו צריכים לבחור זה את הסוג של הדאטאבייס, כלומר מבחינתנו כרגע את Northwind כי בתוך השרת של SQL Server אנחנו יכולים לפתוח מגוון של דאטאבייסים.
אז אנחנו בוחרים כאן את Northwind ואנחנו לוחצים על טסט קונקשן בכדי לבדוק שההתחברות אכן הצליחה, אכן הסרבר name נמצא בהצלחה, אכן Northwind נמצא בתוך SQL Server ואפשר ללחוץ על אוקיי.
אנחנו רואים שהוא הצליח להתחבר לsql express למסד הנתונים נורפרינג בואו נלחץ על נקסט בחלונית הזאת יש לנו פה איזושהי שאלה ששואלת האם ברצוננו לשמור את ההגדרות של ההתחברות בקובץ קונפיגורציה קובץ קונפיגורציה זה קובץ שנקרא app.config אם אנחנו באפליקציה to inform והוא מחזיק את ההגדרות לגבי האפליקציה
הנוכחית אחת מההגדרות שהוא שואל אותנו ואם אנחנו רוצים לשמור את כל ההגדרות שכרגע הגדרנו להתחברות לדטאבייס כך שאם נרצה בהמשך שוב פעם להתחבר לדטאבייס אז ההגדרות האלה שמורות ולא נצטרך לעבור על כל התהליך הזה אז מאוד כדאי לשמור את זה בקובץ הקונפיגורציה בואו נלחץ על Next אנחנו מגיעים לחלונית שאומרת לנו
תראו, אני גיליתי שיש לכם כל מיני טבלאות וכל מיני דברים נוספים שנמצאים בתוך הדטאבייס אלו דברים בדיוק אתם רוצים שאני אתחבר אליהם.
אז בואו נציג כרגע את טבלת העובדים. יש במסד הנתונים Northwind מגוון טבלאות, כל מה שאתם רואים פה זה טבלאות, ואנחנו רוצים להציג את טבלת ה-Employees, טבלת העובדים.
אז אנחנו מסמנים אותה, נבצע Finish ואנחנו הולכים לראות שהData Grid View מתחיל להיראות ככזה שמציג לנו נתונים לגבי עובדים.
בואו טיפה נסדר אותו, נבחר את הטופס, נגדיל טיפה את הטופס, נבחר את ה-Data Grid View ונגדיר Dock in Parent Container בכדי שהוא יתפוס את כל המיקום שיש בטופס.
בואו נשמור. עכשיו, בנוסף לזה שהתחברנו אנחנו רואים כאן למטה כל מיני רכיבים שונים שהתווספו לנו בכדי לאפשר לנו להביא את המידע ובכדי לאפשר לנו לשמור את המידע בחזרה.
אז בואו נסתכל רגע מה זה הרכיבים האלה. יש לנו פה רכיב שהתווסף שנקרא Northwind Data Set. אנחנו רואים גם שהרכיב הזה קיים כאן, Data Set.
Data Set זה פשוט מאוד רכיב שמסוגל לשמור מספר טבלאות בזיכרון כאובייקטים. כלומר, מה שהולך לקרות זה שההתחברות הזאת שכרגע ביצענו הולכת לגשת לדאטאבייס, להביא את טבלת העובדים ולשמור אותה בתוך אובייקט שמחזיק טבלה. כלומר, יהיה פה שכפול של טבלת העובדים לאובייקט בצד של האפליקציה שיחזיק את כל הנתונים ואז נוכל להציג אותו.
אז כל הנתונים נשמרים בתוך הדאטה סט שבייסיקלי מסוגל לשמור סדרה של טבלאות. הרכיב הזה, Employees Binding Source, זה בעצם רכיב שמאפשר לבצע את ההתחברות עצמה לדאטאבייס, ויש לנו פה עוד רכיב, Employees Table Adapter, שהוא מאפשר למלא את טבלת העובדים ולעדכן שינויים
ממנה בחזרה לדאטאבייס. אנחנו פחות נתעסק עם הרכיבים האלה, אנחנו רק צריכים לדעת שהמערכת מייצרת לנו אותם בכדי לתמוך בכל הוויזואליזציה הזאת שכרגע הבאנו.
אם אנחנו ניכנס לקוד עצמו, view code, אנחנו נוכל לראות שקיימת לנו פה פקודה אחת שאוטומטית הוגדרה עבורנו באירוע שנקרא form1.underline load.
קודם כל מתי האירוע הזה מתרחש? האירוע הזה מתרחש כאשר הטופס נטען, כאשר הטופס בא להיות מוצג, שנייה לפני שהוא מוצג האירוע לואוד מתרחש. ובאירוע לואוד אנחנו רואים שיש לנו גישה לאמפלואיז טייבל אדפטר, הרכיב שמקודם אמרנו שמסוגל למלא את הטבלה ולהחזיר את השינויים בחזרה לדאטאבייס.
פיל ממלא את המידע מהדאטאבייס אלינו לצד של האפליקציה, כי בואו ניזכר רגע ונראה שהדאטאבייס זאת מערכת חיצונית לאפליקציה שאנחנו בונים.
הנתונים נשמרים באופן חיצוני. לכן אנחנו רוצים לגשת אל אותה מערכת חיצונית ולהביא את כל המידע אלינו. כל המידע הולך להתמלא בתוך הדאטה סט שדיברנו עליו מקודם שמסוגל להחזיק הרבה טבלאות שונות ובתוכו אנחנו רואים טבלה אחת שנקראת employees שזאת בעצם טבלת העובדים כי זאת הטבלה שרצינו להביא.
זאת אומרת אם אנחנו נריץ את האפליקציה הזאת בואו נלחץ על ctrl f5 אנחנו נראה שהאפליקציה רצה וכל המידע של האמפלואיז הולך להיות מוצג בממשק משתמש שלנו שבנינו.
ואנחנו רואים כאן את הקוד של העובד, אנחנו רואים את השם משפחה שלו, את השם הפרטי שלו, טייטל, איזושהי כותרת ואם אנחנו הולכים ימינה אנחנו יכולים לראות את כל הנתונים הנוספים, תאריך לידה, תאריך העסקה, אנחנו יכולים לפתוח יותר כל אחת מהתאים כאן ושימו לב למשהו מעניין שרכיב ה-Data Grid View מסוגל
להציג. אם אני אגלול פה עוד ימינה אנחנו נוכל לראות שהרכיב מסוגל גם להציג תמונות. הן לא באיכות הכי טובה אבל עדיין יש לנו אפשרות להציג תמונות בתאים עצמם וכמובן המידע של התמונות מגיע מהדאטאבייס עצמו, בדאטאבייס יש את התמונה עצמה שנמצאת בתוך הטבלה בעמודה פוטו.
אם כך אנחנו רואים שאנחנו הצלחנו להציג בעצם את כל המידע מטבלת העובדים והשאלה היא האם אנחנו יכולים עכשיו לבצע שינויים במידע.
זאת אומרת האם אני יכול ללכת ולהגיד שננסי לדוגמה התחתנה ולכן השם משפחה שלה וכבר לא דבוליו אלא כהן. האם אנחנו יכולים ללכת ולהוסיף עובד חדש? נניח להוסיף את מוישה לוי.
האם המידע הזה אכן נשמר בדאטאבייס? אז בואו נבדוק. כל מה שאנחנו צריכים לעשות זה לסגור את האפליקציה ולהריץ אותה שוב.
בואו נראה אם המידע נשמר, ואנחנו רואים שהוא לא נשמר. אז איך אנחנו יכולים לשמור את כל השינויים שהמשתמש עשה? מה שאנחנו צריכים לעשות זה פשוט מאוד קודם כל לאפשר איזה לחצן או תפריט שיאפשר לשמור את הנתונים.
בואו נוסיף תפריט בשביל לא לפגוע ב-user interface כרגע, היא מאוד איזשהו לחצה. אז ניגש ל-Menu Strip, דאבל קליק, אנחנו רואים שהתפריט נמצא כאן, Data, Save, נתפוס את ה-Save, ניגש וניתן לו שם MNU Save, ולאחר מכן דאבל קליק על התפריט,
אנחנו מגיעים לקוד עצמו. וכל מה שאנחנו צריכים לעשות זה להוסיף כאן איזושהי פקודה שמאפשרת לשמור את השינויים. כל מה שאנחנו צריכים לעשות זה להעתיק את הפקודה הקודמת ובמקום לקרוא לפונקציית פיל אנחנו צריכים לקרוא לפונקציית Update מפני שאמרנו שהרכיב הזה שנקרא אדפטר מסוגל גם להביא את המידע
מהדאטאבייס על ידי פונקציית פיל ולמלא אותו בטבלת האמפלואיז וגם להחזיר את כל השינויים שהתבצעו בטבלת האמפלואיז בחזרה לדאטאבייס על ידי פונקציית Update כלומר, רכיב ה-data-grid-view הזה שאנחנו רואים מאפשר למשתמש לבצע שינויים.
שינוי יכול לכלול עדכון, יכול לכלול הוספה ויכול לכלול מחיקה של רשומות, של שורות. כל שינוי כזה, רכיב ה-data-grid-view מעדכן את האובייקט הזה, אמפלואיז, שמחזיק את כל המידע, ואז האדפטר שהוא המתאם, המילה אדפטר זה מתאם בעברית,
האדפטר יהיה מסוגל to update, להחזיר בחזרה את כל השינויים שהתבצעו על ידי הגריד בחזרה לדאטאבייס. בואו נריץ עכשיו, אנחנו מריצים את התוכנית, נחזור לפה, נאנסי הופכת להיות כהן ונוסיף כאן את מוישה לוי, נבצע סייב, נסגור את התוכנה, נריץ אותה שוב פעם ונראה שהמידע נשמר פיזית
בדאטאבייס. אנחנו כמובן יכולים ללכת ולמחוק אם אנחנו מסמנים את הרשומה ולוחצים על מכש הדיליט הרשומה נמחקת.
נבצע כמובן סייב אחרת המידע הוא רק מקומית שונה ולא בדאטאבייס. נסגור את האפליקציה נריץ שוב ונראה שמוישה כהן שהוספנו או מוישה לוי לא קיים כאן יותר. אז בעצם הצלחנו כרגע לגשת לדאטאבייס להביא מידע ולהציג אותו ברכיב הזה, בעזרת ה-Data Grid View שראינו עכשיו עם כל התהליך של הבאת המידע ושמירת המידע בחזרה לדאטאבייס.
עכשיו, בואו נראה שיטה נוספת להציג מידע מהדאטאבייס ולעדכן אותו בחזרה. לצורך הדוגמה הנוספת אני אסגור את האפליקציה הזאת ואני אבנה אפליקציה חדשה.
אז יש לנו פה File Close Solution, File New Project, בואו נקרא לו Data Control 2, פוגווין פורמס אוקיי פעם מה שאני רוצה לעשות זה משהו קצת שונה ממה שעשיתי מקודם מה שעשיתי מקודם זה פשוט גררתי את הדאטה גריד ויו ואז הגדרתי מה המידע שאני רוצה להציג בו אני הפעם רוצה לעשות משהו הפוך
אני רוצה קודם כל להגדיר איזה מידע אני רוצה להביא זה על ידי רכיב שנקרא ביינדינג סורס מקור נתונים בשביל לבצע קישור מסוים ולהצגת הנתונים ב-UI ואז להחליט מה המידע שאני רוצה להציג, או יותר נכון באיזה רכיבי UI להציג את המידע הזה, כן?
UI, User Interface, איך בדיוק להציג ב-User Interface את המידע שאני מביא. אז מה שאני עושה, אני זורק על הטופס את הרכיב Binding Source, אני רואה אותו פה למטה, זה לא רכיב שרואים אותו, הוא רק מתחבר למקור נתונים וחושף מידע.
אני הולך לתכונה data source ומפה אני מבצע את ההתחברות. אני הולך ל-add project data source ומבצע את אותו תהליך שעשינו מקודם. ניגש ל-database, נקסט, עוד פעם דאטה בייס, נקסט.
הפעם אתם כבר אמורים לראות כאן את הקישור הקודם שהגדרתם, בואו נתחבר אליו, אין צורך להגדיר מחדש. נבצע נקסט, שוב פעם נשמור אותו בקובץ הקונפיגורציה ואנחנו רוצים להביא הפעם, בואו נביא משהו שונה.
נלך לאוסף הטבלאות שיש בתוך הדאטאבייס ונביא הפעם את טבלת הלקוחות customers. דרך אגב, אנחנו לא חייבים להביא את כל התכונות או העמודות מטבלת הcustomers, אנחנו יכולים להחליט איזה תכונות אנחנו רוצים ואיזה תכונות אנחנו לא רוצים. לדוגמה, בואו לא נביא את region ואת contact title.
נניח שאני לא רוצה לראות אותם. כל היתר אני כן רוצה מטבלת הלקוחות של מסד הנתונים Northwind. נבצע finish ושימו לב שאני עדיין לא אמור לראות שום דבר על הטופס, אם אני עכשיו אריץ את האפליקציה אני לא אמור לראות שום דבר, יש לי פה טופס ריק לגמרי כי לא הגדרתי איך אני רוצה לראות את טבלת הלקוחות שהבאתי.
בשביל להגדיר איך אני רוצה לראות את טבלת הלקוחות אנחנו אנחנו הולכים לאזור הריק הזה שאתם רואים כאן, לוחצים הקש ימני ואז אנחנו יכולים להוסיף סרגל נוסף. יש פה המון המון סרגלים שניתן להוסיף בוויז'ואל סטודיו.
כרגע יש לנו רק את סרגל הסטנדרט, שזה הסרגל שאתם רואים שמוצג, הטול סטריפ. הסרגל שאנחנו רוצים להציג זה סרגל שנקרא Data Design.
Data Design זה איזשהו סרגל קטנצ'יק, אנחנו יכולים לראות אותו כאן, ובעזרתו אנחנו מציגים חלונית שנקראת Data Sources. כלומר, החלונית הזאת תראה את כל מקורות הנתונים שהתחברנו אליהם.
ומה שאני רואה כרגע זה שהתחברתי למקור נתונים אחד ויחיד שנקרא Customers, כלומר, טבלת הלקוחות ממסד הנתונים Northwind.
ויש לי עכשיו אפשרות לעשות את הדבר הבא. יש לנו אפשרות פשוט לקחת את מקור הנתונים הזה ולגרור אותו על הטופס ולזרוק אותו. אם אנחנו עושים את זה אנחנו רואים שעוד פעם מופיע לנו פה data grid view כמו שהיה מקודם, פשוט הפעם עשינו את הפעולה ההפוכה, קודם כל התחברנו למקור הנתונים ואז החלטנו
שאנחנו רוצים להציג אותו על ידי data grid view. זאת אומרת אם אנחנו מריצים כרגע את האפליקציה אנחנו יכולים לראות שיש לנו פה data grid view שמציג לנו את כל נתוני הלקוחות.
אבל זאת לא האופציה היחידה שלנו להציג מידע ולכן מה שאני אעשה אני פשוט אמחוק את הדאטה גריד ויו הזה. אני אחזור בחזרה לכאן אתם רואים שהאייקון של המקור נתונים קסטומר זה בעצם אין גריד כזה ולכן אנחנו ברגע שגררנו קיבלנו דאטה גריד ויו אבל אנחנו יכולים לפתוח את התיבת גלילה הזאת
ולהגדיר שבעצם אנחנו לא רוצים לראות דאטה גריד ויו אלא אנחנו רוצים לראות משהו שנקרא אם אנחנו מחליפים את זה לדיטיילס אנחנו רואים ציור של פורם אם אנחנו עכשיו גוררים את הפורם שימו לב מה אנחנו הולכים לראות אני הולך לעזוב אותו ומה שאנחנו הולכים לראות זה פשוט מאוד
ויז'ואל סטודיו הדיזיינר בונה לנו מעין פורם שמציג לנו את הנתונים אבל על ידי לייבלים ותיבות טקסט אוקיי בואו נריץ ונראה מה כעת אנחנו רואים קונטרול F5, אני מריץ את האפליקציה, ומה שאנחנו הולכים לראות זה את הנתונים שמוצגים בתיבות טקסט.
אבל רגע, מקודם השתמשנו ב-DataGridView וראינו את כל הטבלה. אני מזכיר לכם, טבלה שלמה מחזיקה המון המון שורות.
כל שורה זה פריט בודד או ישות בודדת, זאת אומרת, אם אנחנו מתעסקים עם טבלת הלקוחות, כל שורה זה לקוח אחד וכל תא בשורה זה הגדרה מסוימת של לקוח לדוגמה שם, תיאור, קוד, כתובת, טלפון וכך אם אנחנו מציגים טבלה שלמה על ידי הרכיב data grid view אנחנו יכולים במבט אחד לראות את כל הטבלה ואת
כל הלקוחות כל שורה היא לקוח. אבל זה לא המצב שאנחנו רואים פה כרגע אנחנו רואים כרגע נתונים לגבי לקוח אחד ויחיד הנה הקוד שלו אלפקי הנה שם החברה של הלקוח הנה שם איש קשר הנה הכתובת הנה העיר זאת אומרת אנחנו רואים רק רשומה אחת שהייתה פעם בדאטה גריד ויו וזאת בעצם הרשומה הראשונה שאנחנו רואים אז איך אנחנו יכולים להמשיך
ולצפות ביתר הנתונים איך אנחנו יכולים לעדכן ולהחזיר את המידע לצורך כך אנחנו צריכים לחזור לטולבוקס ולהשתמש ברכיב שנקרא ביינדינג ביינדינג נאביגייטור כל מה שאני עושה אני זורק את הרכיב הזה וזה בעצם רכיב טול סטריפ כזה או טול בר כמו שהיה לנו בעבר זה הטול סטריפ הזה שהשתמשנו איתו שהוא
מוגדר אוטומטית ומחזיק לנו מידע לגבי איך אנחנו יכולים לשייט בתוך אוסף הנתונים שיש לנו בואו טיפה נגדיל את הטופס כל מה שאנחנו צריכים לעשות עכשיו זה לתפוס את הרכיב הזה ביינדינג נאביגייטור וללכת לתכונות שלו, ללכת לתכונה שנקראת Binding Source, כלומר מה מקור הנתונים של ה-Binding, של הקישור שלו,
ולבחור Customers Binding Source. ואז בעצם קישרנו את הרכיב הזה לטבלת ה-Customers. בואו נריץ, תוכנית רצה, ואנחנו מעבר לעובדה שאנחנו רואים פה את הלקוח הראשון, אנחנו יכולים לראות שאנחנו יכולים עכשיו לשייט
מוב נקסט ולעבור בצורה כזאת בין כל הלקוחות מוב לאסט ללכת ללקוח האחרון בחזרה לראשון להוסיף לקוח חדש למחוק לקוח קיים אבל אין לנו לחצן של הוספה הם לא הגדירו את זה אם אנחנו עכשיו מוסיפים לקוח חדש אז אנחנו צריכים להגדיר בעצמנו איזשהו לחצן של הוספה בשביל שהוא אכן יתווסף לדאטאבייס אם אם אנחנו כבר בענייני טול סטריפ אז בואו פשוט
נוסיף כאן באטם. הלחצן הזה אמור להיות לחצן עבור הוספת לקוח חדש. בואו נקרא לו btn-save, שמירת לקוח קיים ואנחנו רק צריכים להגדיר לו אייקון מתאים.
אז אנחנו יכולים להיכנס לאתר שאנחנו כבר מכירים, להוריד משם איזשהו אייקון מתאים, בואו ניכנס לאייקון פיינדר, נוריד איזה אייקון חינמי, קודם כל נעשה חיפוש ל-save, ניגש פה ונחפש איזה אייקון שמותר לנו להוריד.
יש לנו פה כל מיני אייקונים של שמירות נתונים. בואו ניקח את זה. נלחץ על ICO ונשמור אותו בדסטופ כ-save.ico. אוקיי, אפשר לסגור את זה.
אפשר לחזור בחזרה לאימג' אימפורט, להציג את כל הקבצים, נבחור save ICO, ויש לנו עכשיו אייקון של save. דאבל קליק עליו, אנחנו נמצאים בלחצן כמובן, ואנחנו צריכים עכשיו לעשות שתי פעולות בכדי לבצע את השמירה.
פעולה ראשונה, אנחנו צריכים לצאת ממצב העריכה. איך אנחנו יוצאים ממצב העריכה? customers.binding.source.endedit למעשה, הפקודה הזאת היה טוב אם היינו עושים את זה גם בהדגמה הקודמת, מפני שבהדגמה הקודמת, כאשר אנחנו רשמנו מידע בתוך הגריד, אז אם שמתם לב היה שם אייקון של עיפרון שאומר
שאנחנו במצב עריכה. כאשר לוחצים Enter יוצאים ממצב העריכה ואז אפשר לשמור. אבל יכול להיות שהיוזר לא ביצע Enter וישר לוחץ על הלחצן Save.
ולכן אנחנו חייבים קודם כל לסיים את מצב העריכה, End Edit, ואז רק אפשר לשמור. אז אפשר היה לעשות את זה גם בהדגמה הקודמת, זה יותר בטוח עבור היוזר.
הדבר הבא שאנחנו רוצים לעשות זה בדיוק את הפקודה שהייתה בהדגמה הקודמת, וזה יהיה פקודת Update. אחרי שיצאנו וסיימנו את מצב העריכה, אנחנו יכולים לשמור את כל השינויים.
בואו נריץ, התוכנית רצה, אנחנו יכולים עכשיו לטייל בנתונים, אנחנו יכולים לגשת לסוף, אבל אנחנו לא חייבים דרך אגב לגשת לסוף בשביל להוסיף נתון חדש.
בשביל להוסיף נתון חדש לוחצים על הפלוס הזה, מגיעים לדף ההוספה של לקוח חדש, בואו נקרא לו הפעם ABCDE. שימו לב שבטבלת הלקוחות במסד הנתונים נורפווינד אנחנו צריכים לציין מה קוד הלקוח וקוד הלקוח זה מחרובת בעלת חמישה תווים.
אז בואו ניתן לה את השם מוישה contact name מוישה כהן address תל אביב סיטי ישראל פוסטל קוד 12345 האמת שאדרס זה תל אביב או ליתר דיוק בואו נרשום הרצל 48 תל אביב אני ממציא כתובת סיטי תל אביב נוריד מפה את התל אביב זה יהיה קצת יותר הגיוני וקאנטרי ישראל ופון פאקס יש לנו את כל הנתונים של הלקוח החדש בואו נלחץ על סייב
שימו לב שלא הצגתי שום הודעה וכדאי בעצם להציג איזשהו message box של הפרטים נשמעו בהצלחה. נבצע סגירה ונריץ עוד פעם את התוכנית.
הפעם אנחנו רואים אותו כבר מוצג בתור הלקוח הראשון. למה? מפני שהטבלה עצמה של ה-customers מציגה את המידע בצורה ממוינת אוטומטית לפי קוד הלקוח.
זאת הסיבה שאנחנו רואים אותו ראשון כי אנחנו הכנסנו ABCDE וזה כבר הלקוח הראשון שאנחנו רואים. אם היינו רוצים לעשות את השמירה בצורה קצת יותר מקצועית אז כמובן message box show done או הודעה אחרת וחשוב מאוד אם אנחנו מתעסקים בנוגע לבין מסדי נתונים להגדיר טיפול בחריגות כדי שאם תתבצע איזושהי
חריגה נציג לפחות איזושהי שגיאה עבור הלקוח כדי שהתוכנית לא תקרוס אז אנחנו יכולים עכשיו להוסיף לקוח נוסף ולראות את ההודעה בואו נלחץ על add new הפעם נוסיף 12345 דנה פוד דנה לוי בואו נשאיר את אלה פתוחים או ריקים נבצע סייב ונראה שהשמירה הצליחה נסגור את התוכנית נריץ שוב ונראה שבתור
לקוח ראשון אנחנו רואים את הלקוח קוד הלקוח אחד של M345 שהוספנו, לקוח שני יהיה ה-ABCDE שהוספנו וכולי. כאן בעצם הצלחנו להציג את המידע בצורה קצת אחרת בעזרת רכיבים נוספים שהיו בסרגל הדאטה.
אפשר כעת להיפטר מהדאטה דיזיין וכל מה שנשאר לנו לראות זה מה זה הרכיב הזה של הצ'ארט שיש פה. רכיב הצ'ארט מאפשר לנו להציג גרף של נתונים. הגרף הזה יכול להילקח מדאטאבייס, הגרף הזה יכול להילקח מקובץ, בסך הכל מידע שאנחנו רוצים להציג, בואו נראה איך אנחנו עובדים איתו.
לצורך פניית דוגמה שכוללת צ'ארט, בואו נפתח אפליקציה חדשה לגמרי. נסגור את התוכנית הזאת, נלך לפייל new project, נגדיר data controls chart ויש לנו כרגע טופס ריק לגמרי.
דבר ראשון, בואו נציג מידע מדאטאבייס בצ'ארט. אנחנו צריכים שיהיה לנו את הצ'ארט עצמו, נגורר אותו, נגדיר אותו בצורה כזאת על הטופס, אבל בואו נעשה משהו קצת יותר מעניין.
בואו נגיד שאנחנו רוצים להציג מידע בגרף כתלות באיזשהו רכיב אחר שאנחנו בוחרים בטופס. בטבלת הנתונים Northwind קיימת טבלה שנקראת Products, והיא מכילה מוצרים.
לפרודקט לכל מוצר יש קטגוריה מסוימת. הקטגוריות מתוארות בטבלה אחרת שנקראת categories. קטגוריות. בואו נעשה הדגמה כזאת.
יוזר בוחר קטגוריה ורואה את המוצרים מאותה קטגוריה ובכל מוצר הוא רואה את המחיר שלו. אז לצורך כך בואו נאפשר למשתמש לבחור קטגוריה. נגדיר איזושהי לייבל נקרא לה lblcategory בלי הנקודותיים.
נגדיר למשתמש הודעה Select Category. את הקטגוריות המשתמש יוכל לבחור דרך קומבו בוקס שראינו באחד הסרטונים הקודמים. נקרא לקומבו בוקס הזה CBO Categories ונגדיר שהמשתמש לא יכול להמציא קטגוריה משלו.
הוא חייב לבחור אחת ברשימה. אז אנחנו נגדיר את ה-Drop-Down Style כ-Drop-Down List. דבר ראשון, מה שאני רוצה לעשות זה להתחבר לדאטה בייס ולהביא מהדאטה בייס את רשימת הקטגוריות ולהציג אותה בצורה אוטומטית בתוך הדרופ דאון ליסט, בתוך הקומבו בוקס בעצם.
דרופ דאון ליסט זה קומבו בוקס בעולם הווב. טוב, איך עושים את זה? הפעם בואו נתחבר לדאטה בייס בשיטה קצת יותר חדישה או שיטה אחרת. מה שנעשה זה ניגש לפרויקט שלנו, data controls chart ונוסיף הפעם new item קובץ חדש אני פשוט רוצה להראות שיטה אחרת שאתם יכולים דרכה להתחבר למאגר הנתונים ולהביא את המידע כאן נבחר בdata
מצד שמאל ונבחר ב-ado.net entity data model אנחנו בעצם הולכים להתחבר למסד הנתונים northwind בואו נרשום פה ששם הקובץ זה Northwind על ידי שיטה שנקראת Entity Framework שאתם יכולים ללמוד אותה בהמשך בקורס ייעודי לזה, קורס שמתאפק עם נתונים.
בואו נלחץ על Add ונגיע לאיזשהו ויזארד דומה למה שראינו מקודם. נתחבר ל-Database, שוב פעם נבחר את הקישור של Database Northwind, מבצע Next, נגדיר כאן את ה-V לגבי האם להגדיר שמות של ישויות כרבים או כיחיד.
נגדיר את זה שאם הישות מתארת פריט בודד, השם שלה צריך להיות ביחיד ולא ברבים. כלומר, אם אנחנו מתעסקים עם טבלה של מוצרים, אז אוסף שמתאר מוצרים יהיה פרודקטס ברבים, אבל מחלקה שמתארת מוצר צריכה להיות פרודקט ביחיד.
ובואו נתחבר בטבלאות לטבלת המוצרים. נסמן כאן product והאמת אנחנו רוצים גם את טבלת categories. אנחנו רוצים להציג את טבלת הקטגוריות בקומבו בוקס.
נבצע finish, המערכת ניגשת לדאטאבייס ומביאה מה שנקרא סכמה של הטבלאות. בעצם איזושהי תמונה או יוצרת לנו כל מיני רכיבים מקומיים באפליקציה שבעזרתם אנחנו יכולים אחר כך לגשת ולהביא את המידע.
בואו נבצע שמירה, אנחנו רואים שיש לנו ישות שמתארת מוצר, ישות שמתארת קטגוריה, יש ביניהם איזשהו ריליישנשיפ כי מוצר הוא מקטגוריה מסוימת.
בואו נסגור את זה ואנחנו רוצים עכשיו למלא את הקומבו בוקס הזה בקטגוריות. אז בואו ניגש לקוד. הדבר הראשון שאנחנו צריכים לעשות בתופס שלנו זה להגדיר אובייקט שהשם שלו והשם שנתנו לקובץ אנחנו רואים פה את הקובץ northwind.edmx עם הסיומת entities מה זה האובייקט הזה האובייקט הזה זה אובייקט שמחזיק
את כל הקשרים לדאטאבייס עצמו בשביל למלא את טבלת הקטגוריות בקומבו בוקס אנחנו צריכים לגשת לקומבו בוקס קראנו לו cbo categories ולגשת לתכונה data source מקור הנתונים שווה db נקודה טבלת הקטגוריז כי הבאנו את טבלת הקטגוריז db זה האובייקט שהגדרנו פה שמחזיק קישור לכל הדאטאבייס אנחנו עכשיו צריכים לומר איזו עמודה ברצוננו להציג אנחנו רוצים להציג את העמודה
category name שם הקטגוריה עכשיו, כאשר אנחנו מציגים את המידע ברכיב קומבו בוקס יש לנו אפשרות עבור כל פריט שמוצג לשמור פריט אחר מאחורי הקלעים.
היוזר לא רואה את מה שנשמר מאחורי הקלעים. זה יהיה value member. אנחנו רוצים עבור כל פריט לשמור את הקוד של הקטגוריה. אם עכשיו אנחנו נריץ את האפליקציה, שימו לב מה בעצם מוצג לנו.
אני מריץ את הכל ואני רואה בקומבו בוקס שיש לי פה את רשימת הקטגוריות מהדאטאבייס בבריג'ז, משקאות, קונדימנטס, תבלינים וכו' וכו'. עכשיו, מאחורי כל מכרוזת שאנחנו רואים פה מסתתר עוד ערך.
אנחנו קבענו שהערך שמסתתר יהיה הקוד של הקטגוריה. אם אנחנו שנייה אחת נסתכל מה קורה פיזית בדאטאבייס, לצורך כך בואו נפתח את הדאטאבייס עצמו וממש נסתכל פיזית מה קורה שם.
נתחבר אליו, מכל מאגרי הנתונים שיש פה נפתח את Northwind, הנה Northwind, נפתח את הטבלאות שלו ונאתר את טבלת הקטגוריות ונסתכל מה המידע שיש בטבלת הקטגוריות.
כעת מה שעשיתי זה פשוט הסתכלתי על המידע פיזית בלי לעבור דרך כל מיני תוכנות, ממש ניגשתי ישירות לדאטאבייס. ומה שאני רואה זה שלכל קטגוריה שאני מזכיר לכם, קטגוריה אחת, זה שורה אחת.
יש קוד ויש שם. אוקיי, אני רוצה להציג את השם אבל מאחורי הקלעים לשמור את הקוד. למה?
כי אם אני רוצה אחר כך לבצע פעולות נוספות עם הקוד או עם הקטגוריה ליתר דיוק, אז כדאי לי להתעסק עם הקוד ולא עם השם, כי שם יכול לחזור הרבה פעמים אבל קוד זה משהו שהוא ייחודי ומתאר באופן חד חד ערכי כל אחת מהרשומות אז איך אני עכשיו יכול להשיג את הקוד בואו ניגש לקומבו בוקס נלחץ עליו דאבל קליק ונגיע לאירוע
Selected Index Change זאת אומרת האירוע הזה מתבצע כל פעם שהיוזר בוחר ערך אחר בקומבו בוקס וכעת מה שאני רוצה לעשות זה לבנות אובייקט קטגורי c לגשת ל-cboCategories.selectedItem להפוך אותו לקטגורי מפני שהפריטים שמוצגים בתוך ה-comboBox הם קטגוריות שימו לב שמה שהצגנו זה אוסף קטגוריות
שבו כל פריט זה אובייקט מסוג קטגורי שהמערכת יצרה לנו אוטומטית c.categoryid c.categoryname בואו נסתכל ונראה שיש לנו כרגע קטגוריה ראשונה בברג'ז אנחנו יכולים לראות קטגוריה מספר 4 דיירי פרודקטס מוצרי חלב זאת אומרת שהצלחנו כאשר היוזר בוחר קטגוריה להגיע גם לקוד שלה וגם לשם שלה.
מעולה. מה אנחנו רוצים לעשות כשהיוזר בוחר קטגוריה? אנחנו רוצים להציג את הקטגוריה בגרף או ליתר דיוק את המוצרים מהקטגוריה בגרף הזה. אז בואו נגדיל טיפה את הטופס וכל הסיפור פה זה סך הכל הגדרות של הגרף עצמו.
אז בואו נעבור ונראה את ההגדרות המרכזיות שניתן להגדיר כאשר אנחנו מבצעים גרף. נעבור אחת אחת ונראה את ההגדרות החשובות. דבר ראשון השם של הגרף אנחנו רוצים להציג את המוצרים ובואו נקרא לו שארט פרודקטס, זה השם של הגרף.
אנחנו יכולים להגדיר לגרף איזשהו צבע רקע. בואו ניקח כסף.