RegisterClientScriptBlock - מעניין:

דונג

New member
Path Path Path Path ../images/Emo10.gif

אני רוצה שה XML שאני מייצר, יווצר באותה ספריה שבה נמצאים קבצי הקוד שלי. איזו מתודה מחזיר לי את ה Path הזה ? חיפשתי ב Google Groups, מצאתי מליון מתודות שמחזירות 2 מיליון סוגי Path, חוץ ממה שאני צריך... :)
 

gilad g

New member
Server.Mappath ../images/Emo13.gif

דוגמא:
Server.Mappath(".") //Will return the current directory.​
 

דונג

New member
נתקלתי ב Server.Mappath

כאשר קראתי כיצד מקבלים את ה Path של קובץ, אם אינני טועה... אתה מתכמן, נולח כפרמטר נקודה, ואז מקבל את ה Path הנוכחי :) יפה :) יתכן שיש פונקציה ייעודית המחזירה את ה Path של תיקיית הנוכחית ?
 

gilad g

New member
אבל...

זאת הפונקציה הייעודית
וחוץ מזה, אם אתה רוצה לטעון קובץ מסוים, למה לא להשתמש ב-
string myFile = @".\myfile.txt";​
 

gilad g

New member
מונע escaping..

אם אני ארשום כך:
"Hello\nWorld"​
הקומפיילר יתייחס לכך כאילו יש לי שורה חדשה באמצע המחרוזת. לעומת זאת, עם ה-@:
@"Hello\nWorld"​
הקומפיילר יתייחס לביטוי בדיוק כמו שהוא... (כלומר עם התו "\" ו-"n" לאחריו
)
 

דונג

New member
IE Web Controls - Tree ../images/Emo70.gif../images/Emo70.gif../images/Emo70.gif../images/Emo13.gif

הורדתי את IE Web Controls, העתקתי את הקבצים לאן שצריך, וניסיתי להשתמש באובייקט העץ. להפתעתי זה עבד :) התקדמתי בשלבים לעבר המטרה : הזנתי ידנית Nodes (ישירות לתוך ה Nodes Property) - עבד ! מחקתי את ההזנה הידנית, יצרתי קובץ XML, שייכתי אותו לאובייקט העץ - עבד ! כעת הגעתי למטרה האמיתית, אכלוס העץ מתוך שליפה מה DB : הבנתי שלא ניתן לאכלס ישירות את העץ משליפת DB, ** אני טועה, וניתן, נא תקנו אותי ! ** אז החלטתי לייצר XML מהשליפה, ואותה לשייך לעץ. יצרתי XML משליפה (select מה DB) ע"י אכלוס DataSet, וביצוע הפקודה myDataSet.WriteXml כעת נתקלתי בבעיה ! ה XML שנוצר הוא במבנה כזה :
<NewDataSet> <Items> <name>משקאות</name> </Items> </NewDataSet>​
כלומר, שם ה ROOT הוא NewDataSet, ועבור כל רשומה הוא יותר טאג Items (כשם הטבלה), שבתוכו טאג עם שם השדה, וערכו. (בדוגמא הנ"ל נשלף רק השדה name). בעיה ראשונה היתה שם ה ROOT, הוא חייב להיות <TREENODES>, אבל ניתן להתגבר על כך אם מציינים שם ROOT חלופי, ב Property הנקרא TreeNodeXsltSrc השייך לאובייקט העץ. בעיה זו נפתרה. הבעיה השניה היא שאובייקט העץ מצפה למבנה אחר ממה שתארתי מעלה, ולכן הוא מוציא שגיאה. המבנה שוא מצפה לו הוא :
<TREENODES> <treenode text="ShowThis"></treenode> </TREENODES>​
עם חשיבות למילים treenode ו text ** מה ביכולתי לעשות ע"מ לגרום לכך לעבוד ? ** האם ניתן לגרום ל myDs.WriteXml להבין פורמט אחר ? האם אני חייב לוותר על הנוחות של שימוש ב myDs.WriteXml, וליצור את קובץ ה XML בצורה "ידנית" ? אשמח לשמוע כל דיעה, בעיקר כזו שלא תחייב אותי לכתוב הרבה קוד שחור, אלא להשאר עם myDs.WriteXml
אם בכל זאת אהיה חייב לעשות זאת בעצמי, דוגמא תועיל מאוד
רוב תודות !
 
אולי לא הבנתי ת'שאלה

אבל למה אי אפשר ישר מהDB? אני עשיתי את זה כך (זה רק חלק מהקוד אז זה קצת מבולבל)
DataSet ds=new DataSet(); string ServerSelect="select * from Servers"; SqlDataAdapter cmServers = new SqlDataAdapter(ServerSelect,sqlConnection1); cmServers.Fill(ds,"Servers"); TreeNode nodeRoot; TreeNode nodeServer; nodeRoot = new TreeNode(); nodeRoot.Text = "Servers"; nodeRoot.Expanded=true; TreeView1.Nodes.Add(nodeRoot); foreach (DataRow rowServer in ds.Tables["Servers"].Rows) { nodeServer = new TreeNode(); nodeServer.Text = rowServer["ServerName"].ToString(); nodeRoot.Nodes.Add(nodeServer); }​
הקוד הזה לוקח נתונים מטבלה בשם servers ורושם בעץ את שמות כל הservers מהטבלה. (אפשר להרחיב את זה עם קריאה מטבלה נוספת שאחד הפרמטרים שלה לדוגמא שם הservers מתאים לטבלה הראשונה, ואז להוסיף עוד נתונים בעץ מתחת לכל שם servers - נראה לי שלא הסברתי מספיק ברור, אשמח להסביר עוד פעם) מקווה שעזרתי
 

דונג

New member
נשמע מעניין מאוד...

ואפילו קריא ומובן..
פשוט לא רציתי להתעסק עם יצירת Nodes באופן דינמי, העדפתי לפשט את זה כמה שיותר, כמו למשל יצירת XML בפקודה אחת, ושיוכו לעץ - הרבה יותר פשוט, לא ? האם לדעתך אפשר להשאר עם הפתרון של ה XML, כלומר - יש פתרון לבעיה שהצגתי ? אם לא, אבחר בדרך שלך, היא די ברורה. בכל מקרה, המון תודה !
 
בקשר לבעיה הראשונה שציינת

אם תיצור את הds עם שם אז הוא ישים ב-root את השם הזה, לכן אם תיצור את הds כך:
DataSet ds=new DataSet(TREENODES);​
יהיה בroot את מה שאתה רוצה. אם אתה יכול אז תקרא לטבלה שלך TreeNode ואז גם חלק קטן מהבעיה השניה יפתר.
 

Admini

New member
אני מציע רעיון עקום

אם זה XML כל כך קטן, מה הבעיה לבנות אותו לבד כסטרינג ? כמו שעושים מתכנתי ASP ? זה אולי לא נוח כ"כ, אבל זה בכלל לא מסובך...
 

דונג

New member
../images/Emo70.gif../images/Emo70.gif../images/Emo70.gif../images/Emo70.gif../images/Emo70.gifמעולה ! אבל.. ../images/Emo70.gif../images/Emo70.gif

מעולה, זה עובד, תודה רבה ! אבל... מן נסתם זה קובע ם כל הפריטים הנשלפם מה DB, כצמתים ראשיים בעץ, ואילו אי צריך דרך לקבוע שחלק מהפריטים, הם בנים של פריטים אחרים. עבור כל רשומת ב DB אני שומר מי האבא שלה, כיצד אני מממש זאת ביצירת העץ ?
 
ככה... ../images/Emo22.gif

בדוגמא שנתתי לך המילה servers מופיעה בשורש, ורשימת כל השרתים תחתיה. כשאתה רוצה לרשום מילים בשורש אתה מוסיף את המילים ישירות ל-TreeView כך:
TreeView1.Nodes.Add(nodeRoot);​
וכשאתה רוצה להוסיף מילה תחת מילה אחרת אתה מוסיף ל-TreeNode המבוקש:
nodeRoot.Nodes.Add(nodeServer);​
בעיקרון כדי לשלב 2 טבלאות מה-DB (ביחס של יחיד לרבים) אתה יכול להסתכל בMSDN תחת הכותרת: HOW TO: Dynamically Add Nodes to a TreeView WebBrowser Control by Using Visual C# .NET (יש גם ב-VB) אם יש לך שאלות, אשמח לענות.
 

דונג

New member
ויש משהו יעיל לממש הררכיה ?

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

gilad g

New member
כן

אין ברירה אלא לעשות רקורסיה על הערכים שבדאטאבייס. עאם הערכים הם יחסית קבועים, ולא משתנים הרבה, אני מציע לך לשקול שימוש בקובץ XML. כך או כך, זהו מקרה קלאסי ל-Output caching.
 

דונג

New member
לאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאאא

1. מה זה Output Caching ? 2. למיטב ידיעותי התכנותיות, כל רקורסיה ניתן לממש בקוד איטרטיבי (לולאות), אתה בטוח שחובה כאן רקורסיה ? 3. במידה וחובה רקורסיה, #C תומך בכך ? אפשר דוגמא ?
 

gilad g

New member
תשובות...

1. Output caching. 2. אפשר להשתמש בלולאות. אבל בגלל שיש כאן עץ, בשילוב עם Output caching, הייתי הולך על רקורסיה. 3. כל שפת תכנות תומכת ברקורסיה:
void PrintNumsToOne(int num) { if(num==1) Console.Writeline(1); else { Console.Writeline(num); PrintNumsToOne(num-1); } }​
הדוגמא מקבלת מספר, ומדפיסה את כל המספרים שקטנים ממנו בסדר יורד.
 
אני ממש ממהרת

לקחת ת'ילדים מהגן אז בקיצור לדעתי תעשה 2 ds באחד תשים את רשימת הסוגים (האב - משקאות וכו') ע"י gruopby מהטבלה או שיש לך טבלה מיוחדת בשביל זה ובשני תיקח את הנתונים כל פעם לפי האב. או שתעשה כמו בקישור מה-MSDN שצרפתי לך.
 

דונג

New member
לא מדוייק...

כי רמתההררכיה אינה תמיד 2, יכולים להיות צמתים עם רמות קינון של 4-5...
 
למעלה