تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] DataGridView بطيء جدا ساعدوني لاجد حل
#2
غالباً يا صديقي المشكلة لا تخص الكائن DataGridView في مثل هذه الحالة
فالعمل يجري وفق سيناريو مختلف

انت تريد ان تحمل كم كبير من البيانات الى الذاكرة و تحديداً الى العنصر DataSet القابع في الذاكرة
هنا تحصل المشكلة , المشكلة التالية التي انت بصددها هي عملية التحرك ضمن هذا الكم الهائل في عنصر DataGridView
فلو اردت عمل فرز او فلترة سترى البطئ في عنصر DataGridview
المهم في الموضوع اذا اردت الحفاظ على ملف XML و ان تتعامل معه وفق نفس الالية الخاصة بقواعد البيانات بحيث تحافظ على سلاسة 
الحركة في كائن DataGridView فيتوجب عليك تخفيض كمية البيانات المعروضة فيه
و لتخفف الضغط و البطئ في عملية تحميل الملف الى الذاكرة
فيتوجب ان تتوفر على جهاز بذواكر عالية وسرعة Bus عالية ايضاً للذواكر لان حجم البيانات المحملة كبير (هذا من جهة HardWare)
اما من ناحية البرمجة و الكود فالافضل ان تنتقي المكتبات الاكثر سرعة في التعامل مع البيانات من جلب و استعراض...الخ

و كذلك ان تغير من السيناريو المتبع في طريقة الربط مع عنصر القريد (امور كثيرة يجب توفيرها لا اريد ان ادخل في تفاصيلها...)
بكل الاحوال انا عملت لك تعديل على المثال يقوم بجلب البيانات في غضون 14-20 ثانية و يحملها في الذاكرة بعد ان كان الكود لديك يستغرق اكثر من دقيقة.
ثم قمت بعملية تقسيم للبيانات الى صفحات لتسهيل عملية عرضها في الكائن DataGridView
قمت بعرض 15 عنصر في كل صفحة (طبعاً يمكن التغير من الكود لعدد السجلات المعروضة)
وقمت بتوفير الازرار المناسبة لعمليات التنقل لباقي الصفحات كما ترى في هذه الصور




سارفق الكود و المثال (ربما لا يعمل المثال لديك , المثال معمول على VS2015)

الكود  


PHP كود :
ImportsSystem.IO

Public Class WORK

    Const PAGE_SIZE 
As Integer 15
    Private _nPage 
As Integer 0
    Private _maxPages 
As Integer

    Private Sub Frmmain_Load
(sender As ObjectAs EventArgsHandles MyBase.Load

        Dim myXMLfile 
As String My.Application.Info.DirectoryPath "\" & "data.xml"

        If File.Exists(myXMLfile) Then

            Dim fsReadXml As New FileStream(myXMLfile, FileMode.Open)
            DS.ReadXml(fsReadXml)

            _maxPages = Convert.ToInt32(Math.Ceiling(CDbl(DS.Tables(0).Rows.Count) / PAGE_SIZE))

            BindPageToGrid()
            LbNumber.Text = _nPage

        Else
            DS.WriteXml(My.Application.Info.DirectoryPath & "
\" & "data.xml")
        End If

    End Sub


    Private Sub BindPageToGrid()
        Dim dsPage = DS.Tables(0).AsEnumerable().Skip(_nPage * PAGE_SIZE).Take(PAGE_SIZE).[Select](Function(x) x)
        dgvData.DataSource = dsPage.CopyToDataTable
    End Sub

    Private Sub BtnNext_Click(sender As Object, e As EventArgs) Handles BtnNext.Click
        _nPage = (_nPage + 1) Mod _maxPages
        BindPageToGrid()
        Enables_Btns()
        LbNumber.Text = _nPage
    End Sub

    Private Sub BtnPrev_Click(sender As Object, e As EventArgs) Handles BtnPrev.Click
        _nPage = (_nPage - 1) Mod _maxPages
        BindPageToGrid()
        Enables_Btns()
        LbNumber.Text = _nPage
    End Sub


    Private Sub Enables_Btns()
        Select Case _nPage
            Case = 0
                BtnPrev.Enabled = False
                BtnFirst.Enabled = False
                BtnNext.Enabled = True
                BtnLast.Enabled = True
            Case < (_maxPages - 1)
                BtnPrev.Enabled = True
                BtnNext.Enabled = True
                BtnFirst.Enabled = True
                BtnLast.Enabled = True
            Case = _maxPages - 1
                BtnPrev.Enabled = True
                BtnFirst.Enabled = True
                BtnNext.Enabled = False
                BtnLast.Enabled = False
        End Select
    End Sub

    Private Sub BtnLast_Click(sender As Object, e As EventArgs) Handles BtnLast.Click
        _nPage = _maxPages - 1
        BindPageToGrid()
        Enables_Btns()
        LbNumber.Text = _nPage
    End Sub

    Private Sub BtnFirst_Click(sender As Object, e As EventArgs) Handles BtnFirst.Click
        _nPage = 0
        BindPageToGrid()
        Enables_Btns()
        LbNumber.Text = _nPage
    End Sub

End Class 


الملفات المرفقة
.rar   with2.rar (الحجم : 2.65 م ب / التحميلات : 134)
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: جميل علي , جميل علي , dubai.eig , myalsailamy , Amir_Alzubidy , Adrees


الردود في هذا الموضوع
RE: DataGridView بطيء جدا ساعدوني لاجد حل - بواسطة ابو ليلى - 20-11-16, 04:39 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] محتاج اربط DataGridView بزر بحث bakrycold 1 556 28-02-25, 12:11 AM
آخر رد: bakrycold
  [VB.NET] استعراض بيانات في Datagridview واضافة جميع البيانات لجدول محدد sql skode 0 490 12-01-25, 12:50 AM
آخر رد: skode
Information [VB.NET] تنسيق أعمدة DataGridView أبو خالد الشكري 3 583 21-12-24, 02:40 PM
آخر رد: aljzazy
Exclamation [VB.NET] اريد كود لتصدير البيانات من DataGridView الى ملف Excel zazasami 1 498 04-08-24, 09:15 PM
آخر رد: mrfenix93
  تعديل بيانات عمود DataGridView دفعة واحدة مصمم هاوي 2 691 05-03-24, 08:27 PM
آخر رد: مصمم هاوي
  فلترة datagridview بدون قاعدة بيانات صالح عبدالله 3 688 02-02-24, 04:07 PM
آخر رد: صالح عبدالله
  [VB.NET] ظهور التاريخ غير مرتب بالأقدم في datagridview مبرمج صغير 1 4 869 26-01-24, 03:41 PM
آخر رد: atefkhalf2004
  [VB.NET] التاريخ في أداة أبو سامر لطباعة DataGridView مبرمج صغير 1 17 1,542 26-01-24, 01:52 AM
آخر رد: مبرمج صغير 1
  مشكلة في datagridview Adata 4 717 17-01-24, 03:00 PM
آخر رد: aljzazy
Lightbulb [VB.NET] إطهار الصورة بمقاس معين في DataGridView أبو خالد الشكري 2 736 14-12-23, 03:01 PM
آخر رد: أبو خالد الشكري

التنقل السريع :


يقوم بقرائة الموضوع: