עבור לתוכן

VB2010 - מחפש דרך להכריח טופס פתוח לצייר את עצמו מחדש

Featured Replies

פורסם

הי,

יש לי אפליקצית VB2010 שעובדת מול מסד נתונים של access ומאפשרת למשתמש מסויים להכניס נתונים למסד.

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

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

אבל הוא לא מופיע על המסך עד שלא סוגרים את הטופס הראשי ופותחים אותו מחדש שזה משהו שאני לא יכול לעשות מסיבות טכניות.

ניסיתי כבר מספר פקודות כגון

Refresh

Invalidate

ללא הצלחה

אשמח לעזרה

פורסם

השאלה היא מה המנגנון שממלא את הלינקים האלו.

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

בקיצור, את העיקר לא אמרת: איך הלינקים מתווספים.

פורסם
  • מחבר

אני חושב שאת העיקר דווקא כן אמרתי - הלינקים כן מתווספים, אבל לא מופיעים.

פורסם

איך אתה שם אותם על הטופס?

פורסם

איך אתה שם אותם על הטופס?

זה סוד, לא קראת? ;)

פורסם
  • מחבר

איך אתה שם אותם על הטופס?

לא שזה משנה, אבל הנה השורות שיוצרות את הלינקים

 If reader.HasRows Then
Do While reader.Read()

Dim NewLink As LinkLabel = New LinkLabel

' Set the click event handler.
AddHandler NewLink.Click, AddressOf openLink

' Place the link on the form.
NewLink.Name = CInt(reader.GetInt32(0).ToString)
NewLink.Location = New System.Drawing.Point(X, Y)
NewLink.AutoSize = True
NewLink.TextAlign = ContentAlignment.MiddleLeft
NewLink.Text = "Request #" & reader(0).ToString & " Employees Needed: " & reader(1).ToString & " Geographic Area: " & reader(2).ToString
Controls.Add(NewLink)
Y += 30

Loop
End If

נכון לעכשיו מצאתי פיתרון שעובד, לפחות זמנית.

במקום להכריח ציור מחדש אני מסתיר את הטופס, יוצר את הלינקים, ומראה בחזרה את הטופס.

אין לי מושג כמה טוב זה יעבוד כאשר הDB יתמלא במידע ויקח זמן חפש בו, אבל כרגע זה מה שיש.

פורסם

ניסית לעשות SuspendLayout(); לFORM שלך לפני ההוספת, ולבצע RESUME אחרי ההוספה?

פורסם

הקוד שאתה מראה מופעל מתי?

בטעינה? באירוע ציור?

הקוד שלך גם חלקי, הוא מראה שימוש בDataReader שלא ברור מתי הCommand שלה מוגדר.

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

חוץ מזה כדאי להוסיף בלי שום פקודת SQL, ישירות בקוד חדש שיתווסף בהוספת הרשומות, וגם אם כן עושים פקודת SQL לפחות לייעל אותה שלא תביא את כל הרשומות רק את החדשות.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים