מי יכול לעזור ????????????

ami2004

New member
העלאת DataGrid שה scroll שלו למטה

שלום , איך אני מעלה datagrid שיש בו הרבה נתונים אבל בכל פעם שהטופס עולה אני לא רוצה לגרור את הסקרולרר שלו למטה כדי לראות את הנתונים האחרונים שנרשמו אני רוצה שהטופס עולה ישר שהסקרולורר שלו יהיה במצב התחתון כדי נניח לראות את הדף האחרון שיש בגריד מישהו יודע איך עושים את זה ?... ניסיתי כמה פעמים ולא הלך תודה מראש.... אני כותב ב #C מסד נתונים של אקסס .
 
יש לי גם שאלה על ה-DataGrid

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

ami2004

New member
יש אפשרות להוסיף קומבובוקס

תראה יש אפשרות להוסיף אבל זה מאוד מסובך ולא רצוי אני במקומך הייתי מחפש פקד חינמי באינטרנט ומוסיף אותו לויזואל סטודיו
 
היכן אתה מוצא פקד חינמי מוכן?

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

itzikbs

New member
האם אתה מתכוון למשהו כמו ...

האם אתה מתכוון למשהו כמו Master Details ? אם כן, וגם אם לא אתה יכול "לתפוס" את האירוע CLICK על כפתור\לינק שתיצור בGRID ושם תפתח או תחשוף placeholder., או לחלון נפרד או ל DialogWin אופציה נוספת זה להשתמש / DataGrid Nested DataList
 
ראה הודעתי הנוספת

אני מניח ששנינו מדברים על אותו דבר. תסתכל על הפורום כאן, נניח שההודעות מוצגות ב-DataGrid. כל לחיצה על הודעה פותחת את ההודעה במלואה. אני מנסה למצוא דרך כן להשתמש בו אבל לשכלל אותו כך שההודעה עצמה תהיה מוסתרת ולחיצה עליה תפתח אותה במלואה כפי שקורה בכל הודעה כאן בפורום. הכותרת שלה מוצגת וההודעה עצמה מוסתרת. ציינת DataGrid Nested DataList? לא מכיר את זה.
 

itzikbs

New member
טוב, תראה, אם כבר נכנסנו לזה ...

טוב, תראה, אם כבר נכנסנו לזה ... ראשית אני אמנם מפתח ב .NET כבר הרבה זמן, אך מזה זמן אינני משתמש ב GRID שלהם בפלטפורמת הWEB , כמובן. הסיבות הן רבות ומגוונות, אך עיקרן: סירבול, איטיות , מוגבלות וחזרה מרובה לשרת (PostBack). תממש לך GRID באמצעות טבלת HTML עם XML או בלי. ועם קוד בצד הלקוח תשקיע טיפה וזה ישתלם מאוד בעתיד לגבי מבנה כמו בפורום זה. ה GRID של MS לא ייתן לך פיתרון כזה ללא "שיפוץ" מאסיבי שלו, (באמצעות הורשה תוכל לבנות אובייקט משלך המושתת על ה DataGrid Class) . על מנת לבנות מבנה והצגת נתונים כמו בפורום זה ואחרים נתונים, רצוי שבסיס הנתונים שלך יהיה בנוי כמו שצריך מבחינת קשרים בין הטבלאות (הודעות – תגובות להודעות – כל הודעה יכולה להיות הודעה ראשית או תגובה להודעה) ואת זה ניתן לממש די בקלות ובלי הרבה קוד באמצעות טבלת HTML פשוטה ומתודה רקורסיבית המציגה את כל התגובות לכל הודעה. זו הדרך הנכונה, לדעתי לעבוד: להשקיע טיפה בתשתית ואח"כ להפעיל. אתה תוכל להגיע למצב שכל עמוד שלך יכיל 2 – 3 שורות קוד שרק מאתחלות, מתחברות ל DB ומציגות נתונים... אם טיפה הסתבכת, נחזור לעצה הנוספת שלי של NESTED . אין חובה להשתמש ב DATAGRID שימיש ב DataList להצגת נתונים, נותן לך אפשרות פשוטה לכלול "קינון" של DataList נוספים כשדה בתוכו.
 
DataList לעומת DataGrid

לצערי אני משתמש יחסית מתחיל, ככה שכל המושגים הנ"ל עוד חדשים לי ואני צריך להכיר אותם לאט לאט. מה ההבדל למעשה בין תצוגת טבלה ב-DataGrid לעומת תצוגה ב-DataList? רעיון טוב היה לבצע הורשה ממחלקת DataGrid ולהוסיף פרוצדורה. בעקרון מה שצריך לעשות בפועל במימוש זה להוסיף לכל Row בטבלה Row נוסף שיהיה "חבוי" ויכיל את תוכן ההודעה עצמה. לחיצה על ה-Row עם נושא ההודעה יפתח את ה-Row החבוי עם התוכן. נדמה לי שככה זה גם בנוי כאן וכל הודעה תופסת למעשה שתי שורות בטבלה: שורה אחת לכותרת ושורה שניה לתוכן עצמו. יש לי עדיין בעיה עם בסיס הנתונים שלי. אני מעונין לעבור ל-MySQL כי ה-SQL Server מאוד כבד לי כרגע במחשב.
 

itzikbs

New member
אני חוזר ואומר

שוב, שלום לך אני חוזר ואומר: אל לך להתלהב משימוש ב DATAGRID כפי שהוא. תממש זאת באמצעות טבלה משלך. החלוקה של הDATAGRID לעמודים (Paging) אינה מומלצת לשימוש משום שכל PostBack ולחיצה על העמוד הבא\קודם\דפדוף גוררת אחריה בשרת את כל ה DataTable , (בדיוק כמו במיון ...), כלומר אם יש לך 10,000 רשומות ואתה מחלק אותן ל 100 בכל עמוד, כל לחיצה\דפדוף בין כל 100 רשומות גורמת לגרירה וטעינה מחדש של כל 10,000 הרשומות. אז נא לא להתלהב ... אפשר לממש זאת, כמובן באמצעות שאילתא או SP (MSSQL) מאוד פשוטה שמראש "חותכת" ומחלקת את הרשומות הרצויות לפי עימודים וזאת באמצעות שימוש ב: SELECT TOP 100 * FROM TABL1 … ו"חיתוך" של מספר רשומות הלא רצויות , על פי העמוד (כל עמוד נניח 100 רשומות), הנוכחי. לגבי הדוגמא שצירפת: יש שם שימוש ב Paging לא כדאי כל השאר נראה לי בסדר, אבל שוב, מוגבל ... אם אני רוצה עוד ועוד ועוד תתי הודעות ותתי – שדות ??? ו לא נראה לי שזה בוצע מהורשה
 
תודה לך! ../images/Emo45.gif

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

ekampf

New member
לא מדוייק

ציטוט מ-MSDN: If you are working with a large dataset, recreating the entire dataset each time users navigate to a new page can degrade performance. By using custom paging, you can retrieve data in page-size "chunks" — that is, retrieve just a page worth of records at a time. אז זה לא נכון להגיד שחלוקה ל-pages לא מומלצת בגלל שהיא גוררת טעינה מחדש של כל האובייטקטים. ואפשר לממש custom paging לפי מה שאמרת במקום לממש טבלה לבד.
 

itzikbs

New member
קבלו קצת קוד

קבלו קצת קוד custom paging ??? זה לממש את זה בעצמך וזו אינה בעיה: Slice = Request("Slice"); // The Slice is the indicator of what page you ere in (10,20,30 //… or 100,200,300 …) String SqlStr; if (Slice = =1) { // if it is the first page (the 10 first items or 100 or 1000 or 5 or 7 …) SqlStr = "select top 10 * from t1 "; } else { SqlStr = "select top 10 * from t1 where t1.PrimeryKey not in (select top “ + (Slice-1)*10 + " PrimeryKey from t1 order by __) " } // The (Slice-1)*10 נוסחה זו תלויה בחלוקה שנקבעה, במקרה זה החלטתי לחלק את הדף ל10 רשמות לעמוד עתה כל שנשאר זה להציג את מספר העמודים שיש (עם לינקים אליהם) ולבנות סרגל כלים שיכיל גם: NEXT ו PREV כפתורים לניווט אחורה וקדימה.. את זה חכמים, צעירים ומבריקים שכמותכם, אני משאיר לכם רמז: אם אני שומר את שדה SLICE (שזה מספר העמוד הנוכחי) ואני יודע את החלוקה שהוחלט עליה מראש (לא מחייב ניתן לקבוע אותה בצורה דינאמית על ידי הלקוח ...) במקרה שלי זה היה 10 ... אז נשאר "לשחק" : קצת עם חלוקה ב 10 שארית, שליפה של מספר הרשומות הכללי מהטבלה (count(*)) וקצת מתמטיקה לכיתה ו' ואתם מקבלים: נמצאו 85 רכיבים (מציג 10 מהם) <<Next Prev>> 1,2,3,4,5,6,7,8 לגבי השימוש ב GRID מניסיון, אם אתה רוצה GRID מלא שייתן לך: הצגה, עידכון, שליפה, עימוד, מיון, סינון, ועוד ... תצטרך לממש בעצמך משהו שמושתת על ה GRID ה"רזה" של MS. שלא תבין אותי לא נכון, MS בסביבת הפיתוח המדהימה והמפתיעה באיכותה (.NET ), נותנת לך אפשרויות כמעט לא מוגבלות לממש כל מה שתרצה ( ממש !!! ) ביי itzikBS
 
חשבתי על כמה הצעות שיפור:

בקשר לקריאות המיותרות של ה-Paging ל-DB. מה לגבי שימוש ב-Session על מנת לשמור את ה-DB? יש לזה חסרון במשאבים ובכמות המשתמשים בו זמנית. או ששימוש אולי ב-Cache אחד שיהיה משותף לכולם? אני מנסה לחשוב איך להפוך את החסרונות שיש ב-DataList.
 

ami2004

New member
מי יכול לעזור ????????????

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

ekampf

New member
למה לעבוד עקום...

אולי תמיין את הנתונים ב-datasource בסדר הפוך? זה נראה לי הרבה יותר הגיוני...
 

ami2004

New member
חשבתי על זה אבל זה נראה טוב בגריד

מחשבה סבבה אבל זה בעייתי כי זה לא משהו שתלוי בי זאת דרישה אף אחד לא חשב על זה לפני ?.... חייבת להיות איזושהי דרך לעשות את זה מה אתה אומר ?... תעשה מאמץ תנסה למצוא לי איזה פתרון לזה
 

itzikbs

New member
קבל עזרה …

כך, לגבי תפיסת ה "SCROLL" אתה יכול להשתמש ב : window.ScrollTop\ Left עם טעינת העמוד (onload) אני מדבר כמובן על Client Layer אתה יכול "לתפוס" את מימדי ה SCROLL ו"מפקס" את העמוד למקום התחתון ביותר. דבר , נוסף תוכל (עם קצת מחשבה יפה) לבנות GRID משלך שישלב קוד שרת וקוד לקוח, שייתן לך גמישות, תצוגה ועבודה מלאה כאילו זה GRID של windows forms בהצלחה
 
Forms או Web ?

זכרתי שהשאלה הזו עלתה כאן פעם והיום במקרה גיליתי את התשובה ב-Forms אבל מי יודע, אולי בדרך דומה זה גם יעבוד ב-Web. מדהים כמה שזה קל: נניח שיש את הקוד הבא בטופס בו יש DataGrid בשם dataGrid1
DataTable t = new DataTable("Numbers"); t.PrimaryKey = new DataColumn[] {t.Columns.Add("ID", typeof(int))}; t.Columns.Add("Name", typeof(string)); t.Rows.Add(new object[] {1,"One"}); t.Rows.Add(new object[] {2,"Two"}); t.Rows.Add(new object[] {3,"Three"}); t.Rows.Add(new object[] {4,"Four"}); t.Rows.Add(new object[] {5,"Five"}); t.Rows.Add(new object[] {6,"Six"}); t.Rows.Add(new object[] {7,"Seven"}); t.Rows.Add(new object[] {8,"Eight"}); t.Rows.Add(new object[] {9,"Nine"}); dataGrid1.DataSource = t;​
כמובן שהטבלה יכולה לבוא מכל מקום, ולכן זה שאתה עובד עם אקסס זה לא רלוונטי. כל מה שצריך זה את שתי השורות הבאות:
CurrencyManager c = (CurrencyManager)dataGrid1.BindingContext[t]; c.Position = t.Select().Length-1;​
 

shnapsi

New member
הנה הפתרון

dataGrid1.CurrentCell = new DataGridCell(hesbDs1.Tables[0].Rows.Count -1,0); dataGrid1.Select(hesbDs1.Tables[0].Rows.Count - 1);
 
למעלה