עזרה ב VB.NET

shlomo26

New member
עזרה ב VB.NET

שלום לכולם, 2 שאלות, האחת חשובה והשנייה חשובה גם כן. 1.כיצד מציגים נתונים שהוצאתי מטבלה ב DATA BASE בדף ASPX. אני מצליח להציג את הנתונים ב TEXT BOX אך כאשר אני רוצה שהם יופיעו בטבלה כלומר DATAGRID אני נתקל בקשיים. השורות שקיימות בקוד הן ( OleDbConnection1 = New OleDb.OleDbConnection(ConString Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand (sqlCommand, OleDbConnection1) () OleDbConnection1.Open OleDbDataAdapter1 = New OleDbDataAdapter(sqlCommand, (ConString ("OleDbDataAdapter1.Fill(DataSet31, "Person DataGrid2.DataSource = DataSet31 If Not IsPostBack Then () DataGrid1.DataBind מה לא תקין? 2. שאלה שנייה :כיצד מעבירים פרמטר שהוא אובייקט בין דפי ASPX שונים כלומר (Response.redirect(myUrlAddress.aspx?MyObjectParameter=parameterValue כאשר הפרמטר הוא אובייקט ולא INT או STRING לצורך העניין. תודה!
 

gilad g

New member
תשובות

1. מהי הודעת השגיאה? איפה אתה נתקע? ועוד דבר - יישר את הקוד לשמאל, כי ככה אני לא מוכן לקרוא אותו (יש כפתורים מתחת לחלון כתיבת ההודעה של "תחילת קוד" ו-"סיום קוד". 2. איזה סוג אובייקט אתה מנסה להעביר?
 

nattygur

New member
לגבי העברת פרמטרים

ראשית ישנם שלוש דרכים לעבור מדף לדף שתיים מהם דוטנטיות ואחת לא כל כך אבל עובדת. כל דרך מאפשרת צורות מסוימות להעברת נתונים : דרך ראשונה (לא דוטנטית) : שימוש ב Form רגיל (ללא runat=server) כאשר ה Action מופנה לדף הרצוי. במקרה כזה ניתן להעביר פרמטרים ע"י שירשורם ל URL או שימוש ב Input מכל סוג. שרשור ל Url מוגבל בגודלו לעומת Input אשר נשלח כחלק מה Header של הבקשה ואינו מוגבל בגודלו. מכיוון שגם שירשור ל URL וערכים ב Input הם String, פרט ל File, הדרך לשלוח אובייקט הינה Serialization של האובייקט ל String (ניתן להשתמש במחלקה בשם LosFormater אשר אחראית ל Serialization של ה ViewState) והכניס את ה String ל Input. הדף המקבל צריך לעשות DeSerialization ויקבל את האובייקט. דרך שניה : שימוש ב Responsr.Redirect בצד השרת כתוצאה מארוע שמתרחש. החסרון באופציה הזאת שהיא גורמת שתי Round trips בין התחנה לשרת. Redirect שולח לתחנה Header עם הדף המבוקש והתחנה מבצעת קריאה לדף (חזרה לשרת לביצוע הדף). חסרון נוסף שנתוני ה Request כמו Form ו QueryString לא עוברים לדף הנקרא.Redirect מאפשר לשלוח פרמטרים ב URL ,שהם QueryString). כפי שציינתי מעבר פרמטרים ב URL מוגבל (ל 100K) והדרך היחידה להעביר אובייקט היא שימוש ב Serialization אשר יכול להכשל בשל גודל ה String או לחילופין אכסון האובייקט במשתנה Session. דרך שלישית : שימוש ב Server.Transfer בצד שרת בהתרחשות אירוע. דרך זאת מעבירה את ה QueryString ואת ה Form לדף הנקרא בנוסף לכך בשל העובדה כי שני הדפים נקראים באותו Context, ניתן להשתמש באובייקט Context בכדי להוסיף ל Items שלו כל אובייקט שהוא ולקרוא את האובייקט מאותו Context בדף הנקרא. פתרון זה אינו דורש Serialization או אחסון ב Session (אחסון ב session יכול להסתבך במידה ןמשתמשים ב Application Pool ב IIS 6 או ב Web farm יש לבעיות אלו פתרון ב ASP.NET אבל הוא פחות יעיל משימוש ב Session רגיל, במרחב זיכרון של האפליקציה). החסרון של הפתרון הזה שמבחינת הדפדפן לא בוצע מעבר לדף אחר ו Refresh של הדף גורם לביצוע הדף הקורא.
 

gilad g

New member
../images/Emo45.gif

ועוד תוספות: לא חייבים לאחסן את המשתנים ב-Context. אפשר לעשות את זה בדרך הבאה (בדוגמא השתמשתי ב-object, אולם כדי להימנע מ-boxing/unboxing רצוי להשתמש ב-type יותר "חזק"): בדף השולח:
public class SenderPage : Page { public object toSend; /* Code, code, and more code */ toSend = someValue; Server.Transfer("ReceiverPage.aspx"); }​
בדף המקבל:
public class RevceiverPage : Page { //receive the value myValue = ((SenderPage)Context.Handler).toSend; }​
Context.Handler בעצם מחזיר אובייקט מסוג IHttpHandler, שמייצג את ה-handler ש-ASP.NET קרא לו. מכיוון שהוא מסוג IHttpHandler, יש צורך בעשיית casting (כזכור SenderPage יורש מPage שמממש את IHttpHandler).
 

nattygur

New member
נכון, רק שהוא ציין שהוא לא רוצה

להעביר VALUE TYPES אלה אובייקטים ואז זה לא משנה. boxing/unboxing מתרחש רק ל VALUE TYPES. פתרון מאוד יפה, לא חשבתי עליו אף פעם.
 

gilad g

New member
שכחתי לומר

שאת ה-casting עדיף לעשות בעזרת as (ולא בעזרת סוגריים), כדי לא לזרוק exception במקרה שבו אין דף קודם
 
למעלה