asp.net - הוספת control ע"י קוד

ישי ז.

New member
asp.net - הוספת control ע"י קוד

שלום השאלה בוודאי בסיסית ואשמח ללמוד. ניסיתי להוסיף פקד (radiobutton) בדף ASPX במהלך ריצה (עם עליית הדף). פעולה זאת בצעתי בפרוייקט מקביל vb.net ע"י יצירת הפקד והוספתו: Me.Controls.Add (MtCtrl) לעומת זאת ב-ASPX קבלתי הודעה שעלי להוסיפו ל-FORM המוגדר RunAt Server. בדקתי בקוד ה-ASPX וראיתי שקיים כבר FORM המוגדר כך ובכל זאת מתקבלת הודעת השגיאה. תודה לעל העוזרים. ישי
 

ישי ז.

New member
איך יכול להיות ?

הרי התגית FORM נמצאת בלשונית HTML (בקוד HTML) ואילו אני רוצה להוסיף דרך הקוד בעזרת פונקציה. למשל אני לא יודע מראש כמה CONTROLS ארצה להוסיף אלא ייקבע לפי פרמטר. לכן, אי אפשר בתוך ה-FORM אלא ארצה להוסיף ע"י פונקציה שתרוץ ותוסיף אובייקטים. הבנת את הבעיה שלי ? ובכל אופן תודה על תגובתך
 
אהה לא שמתי לב

אז אם אני לא טועה תצטרך למצוא ע"י find control את הטופס לפי השם שלו, ואליו להוסיף קונטרולים בנים.
 

ד ו ב י ר

New member
פתרון

ב"ה זה אכן נכון שיש פקדים שחייבים להופיע בין תגיות ה form, ולכן כשאתה מבצע Me.Controls אתה ניגש לפקדים של הדף ולא לפקדים שנמצאים בין תגיות ה form. מה שצריך לעשות הוא להוסיף Panel בין שתי תגיות ה form, ואז כשאתה רוצה להוסיף פקד, תעשה, panelid.Controls.Add(Control
 

ישי ז.

New member
יש לך דוגמה ?

תודה על תשובתך. מה זה ה-PANEL ? האם זה כמו FRAME ב-VB6 ? בכל מקרה כשהוספתי ב-FORM את ה-PANEL התקבלה הודעה c:\inetpub\wwwroot\Test\WebForm2.aspx(13): The active schema does not support the element 'panel'. מתחת למילה Panel יש קו אדום של שגיאה. אם יש לך דוגמה קטנה שאפשר יהיה להעלותה לכאן, אודה לך ישי
 
אולי הוא התכוון ל - PlaceHolder

זה פקד שמיועד לשמור מקום לפקדים אחרים, שאותם מוסיפים לאוסף Controls שלו.
 

ד ו ב י ר

New member
לא התכוונתי ל PlaceHolder

הנה אני אראה לך:
<%@ Page language="C#" %> <script runat="server"> void Page_Load(Object sender, EventArgs e) { TextBox t = new TextBox(); pnlMyPanel.Controls.Add(t); } </script> <html> <body> <form runat="server"> <asp:panel id="pnlMyPanel" runat="server" /> </form> </body> </html>​
 

ד ו ב י ר

New member
דרך אגב

לא תמיד מוכרחים שיהיה Panel. נניח שיש כבר איזה פקד שנמצא בין תגיות ה form לדוגמא DataGrid, ואתה רוצה באופן דינמי להוסיף פקד לתוך אחד מהשורות, ברור שאתה לא צריך panel כי אתה מוסיף את הפקד לתוך פקד שכבר נמצא בין תגיות ה form. באופן כללי אם תבדוק ב SDK אתה תראה שלהרבה פקדים יש מאפיים שנקרא Controls וזה אומר שאפשר להוסיף לו פקדים.
 
לפי מה שאני יודע,

Panel קיים רק ב - windows forms ולא ב - web. מן הסתם לכל הפקדים יש את האוסף Controls מכיוון שהאוסף הזה מוגדר במחלקה Control, וכל הפקדים יורשים מהמחלקה הזו. אם אתה ממקם PlaceHolder במקום כלשהו בעמוד, ואז מוסיף לו פקדים בצורה דינמית, אתה יכול לשלוט על המיקום שבו הפקדים יתווספו - וזה פותר את הבעיה.
 

ד ו ב י ר

New member
זה לא נכון ש Panel קיים רק

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