WPF יצירת עמודת מזהה בדטה-גריד
-
השיטה האהובה עלי להציג נתונים בדטה-גירד היא עם ObservableCollection של איזו מחלקה שיש בה מאפיינים שכל מאפיין הופך לעמודה בדטה-גריד
השאלה שלי היא מה הדרך הנכונה והבטוחה ליצור מספור אוטומטי שישמש כמפתח עבור הטבלה הזו, ואוכל להשתמש במפתח זה בבטחה כאשר אני רוצה ליצור קשרי גומלין בין כל מני אוספים מסוג ObservableCollection המוצגים בדטה-גריד.
למשל אוסף אחד יהיה של מחלקה 'אנשי קשר' ואוסף אחר של מחלקה 'הזמנות' ובמחלקת הזמנות יש מאפיין 'מזהה לקוח' שמקבל את ערכו ממאפיין 'מזהה' הנמצא במחלקת 'אנשי קשר' הנ''ל.
בקיצור מה שבאקסס נעשה עבורינו באופן אוטומטי איך עושים אותו בדוטנט ?
כמובן שאפשר לכתוב פונקציה פשוטה שתתן כל פעם מספר שלא קיים עדיין בשביל המזהה אבל השאלה האם זו הדרך הנכונה? מה בעלי הנסיון אומרים בעינין? ומה קורה כאשר מוחקים רשומות האם אפשר להשתמש בID שהתפנה או לא?תודה לכולם,
ושבת שלום.פורסם במקור בפורום CODE613 ב19/12/2013 21:59 (+02:00)
-
תוסיף לאובייקט שלך (כמו האנשי קשר) שדה סטטי שיספור איפה אוחזים.
בבנאי תקצה את המספר הפנוי. ככה:Shared inc As Integer Dim _id As Integer Public ReadOnly Property ID Get Return ID End Get End Property Public Sub New() _id = inc inc += 1 End Sub
פורסם במקור בפורום CODE613 ב19/12/2013 22:19 (+02:00)
-
תוך כדי המשך הפיתוח של המסד נתונים הזה שמתי לב שיש פה בעצם בעיה:
כיון ה ID הוא ReadOnly הרי שכשאני שומר את הטבלה בדיסק הוא נשמר, אבל כאשר אני קורא מהדיסק את הטבלה אני לא יכול להגדיר את ה ID כמו שהוא היה, אלא הוא נוצר לבד בצורה אוטומטית וזה כמובן יכול לשבש את כל הקשרי גומלין בין הטבלאות וכדומה, כך שצריך לה ID לא היה ReadOnly בקוד אלא רק כלפי המשתמש בתוך הדטה-גריד.פורסם במקור בפורום CODE613 ב21/12/2013 18:05 (+02:00)
-
נ.ב
צריך לתקן בקוד במקום Return ID
Return _idנכון, התבלבלתי.
לבעיה שכתבת אתה צריך לקבוע את _id (לפי מקור נתוניך) מתוך קונסטרקטור סטטי:
Shared Sub New() 'read file from disk 'and set _id = max + 1 End Sub
אבל זה ממש לא פיתרון טוב עבור מסד נתונים, מכמה וכמה סיבות.
אם זה ממש מסד, אל תטפל במספור אוטומטי, בשביל מה לך.פורסם במקור בפורום CODE613 ב22/12/2013 20:39 (+02:00)
-
@דוד ל.ט.
לבעיה שכתבת אתה צריך לקבוע את _id (לפי מקור נתוניך) מתוך קונסטרקטור סטטי:
אולי זה מה שאתה מתכוון אבל אני הגדרתי שהמאפיין ID הוא לא לקריאה לבד, ואז כאשר אני קורה מהדיסק את הנתונים אני נותן ערך ל ID של כל רשומה ורשומה כמו שהיה לה בריצה הראשונה, ורק בדטה גריד אם אני מציג את העמודה של ה ID היא לקריאה בלבד.
@דוד ל.ט.
אבל זה ממש לא פיתרון טוב עבור מסד נתונים, מכמה וכמה סיבות.
תוכל לפרט בבקשה אני חייב לדעת.
@דוד ל.ט.
אם זה ממש מסד, אל תטפל במספור אוטומטי, בשביל מה לך.
אני חייב שיהיה לי מזהה יחודי לכל רשומה בטבלה, אלא איך אפשר אחרת? הטבלה שלי היא בעצם אוסף ObservableCollection של אובייקט רשומה, למשל 'איש קשר', אני מציג את האוסף בדטה-גריד, המשתמש מוסיף רשומות ואח''כ הכל נשמר בדיסק, אני יוצר קשרי גומלין בין טבלת אנשי קשר לטבלה דומה של הזמנות והכל על פי ה ID, כך שזה מסד לכל דבר רק בלא SQL ובלא דטה-סיט ובלא אקסס.
פורסם במקור בפורום CODE613 ב22/12/2013 21:50 (+02:00)
-
@דוד ל.ט.
לבעיה שכתבת אתה צריך לקבוע את _id (לפי מקור נתוניך) מתוך קונסטרקטור סטטי:אולי זה מה שאתה מתכוון אבל אני הגדרתי שהמאפיין ID הוא לא לקריאה לבד, ואז כאשר אני קורה מהדיסק את הנתונים אני נותן ערך ל ID של כל רשומה ורשומה כמו שהיה לה בריצה הראשונה, ורק בדטה גריד אם אני מציג את העמודה של ה ID היא לקריאה בלבד.
לא הבנתי אותך. אני התייחסתי בכל אופן לקוד שהעלתי לעיל. לא אמורה להיות בעיה גם אם המאפיין הוא לקריאה בלבד, כי השדה הפנימי הוא פתוח לכתיבה.
אנא נסה לא להיות עוד כטוען בחיטים ומודה בשעורים... זה הרי ברור כשמש שלא התכוונתי למה שעשית (שדרך אגב, זה מצויין לגמרי, רק שעדיף למנוע שינוי בטעות אף בתוך הקוד מחוץ למחלקה).@דוד ל.ט.
אבל זה ממש לא פיתרון טוב עבור מסד נתונים, מכמה וכמה סיבות.תוכל לפרט בבקשה אני חייב לדעת.
אתה בטוח שאתה חייב לדעת? מה אם אומר לך שאיני יודע? הנושא הזה הוא יכול להילמד כמה שנים באוניברסיטה. אבל לא בשביל כל מסקנה אני חייב לדעת את ה"הוכחה" כתובה, ואני חושב שגם אתה לא חייב.
דומני שאתה יכול לשער בנפשך שלא נבראו מסדי נתונים רק בשביל מתכנתים עצלנים באופן יוצא מן הכלל, אלא לעוד כמה סיבות טובות.
אם אתה רוצה משל: חשוב מה קורה שאתה מפעיל את התוכנה פעמיים ומעדכן בשניהם. זה בעיונת טפשונת שניתנת לפיתרון קל, אבל עוד כמה כאלה ואתה מגיע למסקנתי.@דוד ל.ט.
אם זה ממש מסד, אל תטפל במספור אוטומטי, בשביל מה לך.אני חייב שיהיה לי מזהה יחודי לכל רשומה בטבלה
אם זה כדי שלכל אלמנט יהיה זיהוי, אתה יכול להשתמש בשמו.
אלא איך אפשר אחרת?
@רחמים
כך שזה מסד לכל דבר רק בלא SQL ובלא דטה-סיט ובלא אקסס.פורסם במקור בפורום CODE613 ב23/12/2013 11:31 (+02:00)
-
@דוד ל.ט.
אתה בטוח שאתה חייב לדעת? מה אם אומר לך שאיני יודע? הנושא הזה הוא יכול להילמד כמה שנים באוניברסיטה. אבל לא בשביל כל מסקנה אני חייב לדעת את ה"הוכחה" כתובה, ואני חושב שגם אתה לא חייב.
דומני שאתה יכול לשער בנפשך שלא נבראו מסדי נתונים רק בשביל מתכנתים עצלנים באופן יוצא מן הכלל, אלא לעוד כמה סיבות טובות.
אם אתה רוצה משל: חשוב מה קורה שאתה מפעיל את התוכנה פעמיים ומעדכן בשניהם. זה בעיונת טפשונת שניתנת לפיתרון קל, אבל עוד כמה כאלה ואתה מגיע למסקנתי.בנתיים לא השתכנעתי שאני לא יכול לנהל לבד מסד נתונים ואני חייב את המוכנים שכל אחד מוגבל במשהו אחר, אודה לך אם תנצל את הנסיון שלך בתחום זה ותחשוב אלו בעיות יכולות לצוץ.
בסופו של דבר אני לא רואה שהדברים מורכבים עד אין חקר, יש פה טבלאות שכל טבלה היא אוסף של רשומות מטיפוס מסויים, קוראים מדיסק ושומרים לדיסק, יש קשרים בין הטבלאות זה דבר שמתבטא בתצוגה ואני אפילו לא הייתי צריך לשמור את זה בדיסק נכון לעכשיו.
אני אומנם רק בתחילת הפיתוח, אבל אני רואה שכשאת הכל אני בונה יש לי גישה לכל דבר ולכל מקום.
אם תרצה אראה לך את הקוד כולו בפרטי.פורסם במקור בפורום CODE613 ב23/12/2013 13:09 (+02:00)