דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. הדרך הטובה ביותר להוסיף הרבה שורות ל DataGridView

הדרך הטובה ביותר להוסיף הרבה שורות ל DataGridView

מתוזמן נעוץ נעול הועבר ארכיון code613m
4 פוסטים 3 כותבים 337 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #1

    יש לי בעיה כזו:
    מצד אחד אני רוצה להוסיף כמה אלפי שורות לDataGridView ומצד שני אני רוצה שהמשתמש יוכל לעצור את התהליך באמצע אם ירצה בכך.
    כדי לעצור את התהליך השתמשתי בטריד חדש שימלא את הDataGridView אבל אז נעלם מהDataGridView הפס גלילה!
    וגם תהליך ההוספה נעשה איטי מאוד.
    ניסיתי גם להוסיף שורות בצורה רגילה ללא טריד חדש וכדי לעשות עצירה הוספתי בתוך לולאת ההוספה Application.DoEvents והשארתי רק את לחצן העצירה זמין, אבל גם אז ההוספה הפכה להיות איטית מאוד מאוד.

    אז מה עושים?

    פורסם במקור בפורום CODE613 ב15/09/2013 20:12 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      אתה מוסיף ישירות לדטהגריד? תנסה לעבוד עם מקור נתונים (DataSource), ולהגדיר את המאפיין DataGridView.VirtualMode לTrue.
      זה אמור לעבוד הרבה יותר טוב בכמויות גדולות של מידע.
      הנה עוד טיפים להאצת/ייעול הפקד הזה: http://msdn.microsoft.com/en-us/library/ha5xt0d9.aspx

      שים לב שאם יש לך את הרשימה ביד, הAddRange הרבה יותר מהיר ויעיל מAdd כפול מס' הפריטים.
      אולי תנסה גם להקפיא את הרפרוש ע"י DataGridView.SuspendLayout בתחילת המילוי, וקריאה לDataGridView.ResumeLayout בסוף.

      פורסם במקור בפורום CODE613 ב16/09/2013 11:54 (+03:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      0
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #3

        באמת בהתחלה עבדתי מול הדטה-גריד בעצמו וDataGridView.SuspendLayout לא עזר כלל.

        אח''כ הוספתי טבלה ל DataSet וקישרת אותה לדטה-גריד עם BindingSource , וכשמילאתי עבדתי עם DataTable הנ''ל ואז זה נהיה הרבה יותר מהר.

        אח''כ עשיתי את זה עוד יותר מהר ע''י DataTable1.BeginLoadData לפני המילוי ואחר המילוי DataTable1.EndLoadData.

        אחר כך עשיתי את זה עוד יותר מהר ע''י שאת את העמודות העיקריות מילאתי בדרך הנ''ל ואת העמודות הטפלות יותר ע''י טריד חדש שמילא את הDataTable1 תוך כדי שמשתמש כבר מפעיל את הדטה-גריד.

        אחר כך עשיתי את זה עוד יותר מהיר כי חשבתי למה המשתמש צריך לראות בבת אחת בתוך הדטה-גריד 800,000 שורות או יותר, די שיראה כל פעם 1000 שורות למשל, ואז עשיתי כמו בחיפוש של גוגל שיש מתחת לתוצאות מספרים שאתה לוחץ ועובר לדף הבא של התוצאות וכך עשיתי, חילקתי את כל השורות שצריך להציג ב1000 והוספתי לפי הצורך LinkLabel עבור כל 1000 שורות וכך המשתמש עובר על כל הכמות ומוצגות לו כל פעם 1000 שורות חדשות.

        אבל מה יש קצת בעיה עם למלא עם טריד את ה DataTable והיא שקופצת לפעמים שגיאה כזו מהדטה-גריד:
        BindingSource cannot be its own data source. Do not set the DataSource and DataMember properties to values that refer back to BindingSource.

        פורסם במקור בפורום CODE613 ב17/09/2013 22:01 (+03:00)

        תגובה 1 תגובה אחרונה
        0
        • A מנותק
          A מנותק
          ayalaleora
          כתב ב נערך לאחרונה על ידי
          #4

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

          וכמובן כמו שכתב לך ד. לב טוב שחובה להשתמש ב-VIRTUALMODE.

          פורסם במקור בפורום CODE613 ב25/09/2013 00:49 (+03:00)

          תגובה 1 תגובה אחרונה
          0

          בא תתחבר לדף היומי!
          • התחברות

          • אין לך חשבון עדיין? הרשמה

          • התחברו או הירשמו כדי לחפש.
          • פוסט ראשון
            פוסט אחרון
          0
          • דף הבית
          • קטגוריות
          • פוסטים אחרונים
          • משתמשים
          • חיפוש
          • חוקי הפורום