منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : الاستعلام لا يعمل مع BackgroundWorker
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3
السلام عليكم اخوتي
عندي استعلام يعمل بشكل جيد عند وضعه في زر
ولكن عند وضعه في ال BackgroundWorker لايعمل
اين الخطأ اخوتي 
ارجو ان اجد الحل
وهدا هو الكود المستخدم

PHP كود :
Private Sub BackgroundWorker1_DoWork(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles BackgroundWorker1.DoWork
        dtEmployee_Table
.Clear()
 
       daEmployee_Table = New SqlDataAdapter("select * from Employee_Table order by Employee_ID "connSQL)
 
       daEmployee_Table.Fill(dtEmployee_Table)
 
       DataGridView1.DataSource = (dtEmployee_Table)
 
       With DataGridView1
            
.RowsDefaultCellStyle.SelectionBackColor Color.BlueViolet
            
.RowsDefaultCellStyle.SelectionForeColor Color.White
            
.ColumnHeadersDefaultCellStyle.BackColor Color.SkyBlue
            
.Columns(0).DefaultCellStyle.BackColor Color.Azure
            
.DefaultCellStyle.WrapMode DataGridViewTriState.True
            
.AutoSizeRowsMode DataGridViewAutoSizeRowsMode.AllCells
            
.Columns(0).Visible False

            
.Columns(1).Width 354
            
.Columns(1).HeaderText "إسم الموظف"

 
           .Columns(2).Width 354
            
.Columns(2).HeaderText "الوظـيـفـه"
 
           .DefaultCellStyle.Font = New Font("Times New Roman"12FontStyle.Bold)
 
           .ColumnHeadersDefaultCellStyle.Font = New Font("Times New Roman"12FontStyle.Bold)
 
           .Columns(0).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(1).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(2).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.ColumnHeadersDefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
        End With

        Dim daEM 
As New SqlDataAdapter
        Dim dtEM 
As New DataTable
        daEM 
= New SqlDataAdapter("select * from Employee_Table order by Employee_Name "connSQL)
 
       daEM.Fill(dtEM)
 
       ComboBox1.DataSource dtEM
        ComboBox1
.DisplayMember "Employee_Name"

 
       ComboBox1.Text ""

 
   End Sub

    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        Control
.CheckForIllegalCrossThreadCalls False
        If Not BackgroundWorker1
.IsBusy Then
            BackgroundWorker1
.RunWorkerAsync()
 
       End If

 
   End Sub 
(28-09-19, 08:48 PM)asemshahen5 كتب : [ -> ]محتاج التعديل على الكود backgroundworker mysql progressbar

[مشروع] مثال للعمل مع الـBackgroundWorker

اشكرك اخي  asemshahen5
ولكن اخي بحثت كثيرا علي النت وكل الفيديوهات بتتكلم عن ال Backgroundworker  وطريقة عملها مع عداد بيعد من 1 الي 1000 او اكثر
ولكن لا يوجد اي فيديو بيتكلم عن ال  Backgroundworker   مع الاستعلام
 وجربت اكثر من طريقه ولا تكتمل
ارجو من حضرتك او الاخوه الاطلاع والتعديل علي الكود
اكون شاكر  جدا وجزاكم الله خيرا
PHP كود :
   Private Sub BackgroundWorker1_DoWork(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles BackgroundWorker1.DoWork
        For Each row 
As DataRow In dtEmployee_Table.Tables(0).Rows
            DataGridView1
.Rows.Add(row.ItemArray)
 
       Next
    End Sub
    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        Control
.CheckForIllegalCrossThreadCalls False
        dtEmployee_Table
.Clear()
 
       Dim connSQL "Data Source=(Local);Initial Catalog=ImportFromExcel;Integrated Security=True"
 
       Dim da As New SqlDataAdapter("select * from Full_Tree_Account order by AccountID "connSQL)
 
       da.Fill(dtEmployee_Table)
 
       DataGridView1.ColumnCount dtEmployee_Table.Tables(0).Columns.Count
        Dim daEM 
As New SqlDataAdapter("select * from Empty_Tree_Account order by AccountID "connSQL)
 
       Dim dtEM As New DataTable
        daEM
.Fill(dtEM)
 
       ComboBox1.DataSource dtEM
        ComboBox1
.DisplayMember "AccountNameAR"
 
       With DataGridView1
            
.RowsDefaultCellStyle.SelectionBackColor Color.BlueViolet
            
.RowsDefaultCellStyle.SelectionForeColor Color.White
            
.ColumnHeadersDefaultCellStyle.BackColor Color.SkyBlue
            
.DefaultCellStyle.WrapMode DataGridViewTriState.True
            
.AutoSizeRowsMode DataGridViewAutoSizeRowsMode.AllCells
            
.DefaultCellStyle.Font = New Font("Times New Roman"12FontStyle.Bold)
 
           .ColumnHeadersDefaultCellStyle.Font = New Font("Times New Roman"12FontStyle.Bold)
 
           .ColumnHeadersDefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(0).DefaultCellStyle.BackColor Color.Azure
            
.Columns(0).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(1).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(2).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(1).Width 354
            
.Columns(1).HeaderText "إسم الموظف"

 
           .Columns(2).Width 354
            
.Columns(2).HeaderText "الوظـيـفـه"
 
       End With

        ComboBox1
.Text ""
 
       If Not BackgroundWorker1.IsBusy Then
            BackgroundWorker1
.RunWorkerAsync()
 
       End If
 
   End Sub 

فقط غيير الاستعلام لاسماء جدولك و اعمدتك .
(01-10-19, 05:21 AM)asemshahen5 كتب : [ -> ]
PHP كود :
   Private Sub BackgroundWorker1_DoWork(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles BackgroundWorker1.DoWork
        For Each row 
As DataRow In dtEmployee_Table.Tables(0).Rows
            DataGridView1
.Rows.Add(row.ItemArray)
 
       Next
    End Sub
    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        Control
.CheckForIllegalCrossThreadCalls False
        dtEmployee_Table
.Clear()
 
       Dim connSQL "Data Source=(Local);Initial Catalog=ImportFromExcel;Integrated Security=True"
 
       Dim da As New SqlDataAdapter("select * from Full_Tree_Account order by AccountID "connSQL)
 
       da.Fill(dtEmployee_Table)
 
       DataGridView1.ColumnCount dtEmployee_Table.Tables(0).Columns.Count
        Dim daEM 
As New SqlDataAdapter("select * from Empty_Tree_Account order by AccountID "connSQL)
 
       Dim dtEM As New DataTable
        daEM
.Fill(dtEM)
 
       ComboBox1.DataSource dtEM
        ComboBox1
.DisplayMember "AccountNameAR"
 
       With DataGridView1
            
.RowsDefaultCellStyle.SelectionBackColor Color.BlueViolet
            
.RowsDefaultCellStyle.SelectionForeColor Color.White
            
.ColumnHeadersDefaultCellStyle.BackColor Color.SkyBlue
            
.DefaultCellStyle.WrapMode DataGridViewTriState.True
            
.AutoSizeRowsMode DataGridViewAutoSizeRowsMode.AllCells
            
.DefaultCellStyle.Font = New Font("Times New Roman"12FontStyle.Bold)
 
           .ColumnHeadersDefaultCellStyle.Font = New Font("Times New Roman"12FontStyle.Bold)
 
           .ColumnHeadersDefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(0).DefaultCellStyle.BackColor Color.Azure
            
.Columns(0).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(1).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(2).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(1).Width 354
            
.Columns(1).HeaderText "إسم الموظف"

 
           .Columns(2).Width 354
            
.Columns(2).HeaderText "الوظـيـفـه"
 
       End With

        ComboBox1
.Text ""
 
       If Not BackgroundWorker1.IsBusy Then
            BackgroundWorker1
.RunWorkerAsync()
 
       End If
 
   End Sub 

فقط غيير الاستعلام لاسماء جدولك و اعمدتك .
جزاك الله خير الجزاء اخي علي اهتمامك ومساعدتك
الكود يعمل تمام الحمد لله بفضل الله ثم مساعدتك اخي
ولكن هناك مشكله بسيطه وهي
عندما اضغط علي الزر لاول مره يقوم بتحميل البيانات ولكن عند الضغط عليه مره اخري يقوم بتحمسل البيانات مره اخري بدون تفريغ البيانات القديمه 
والبرنامج يقف للحظات بسيطه قبل التحميل 
فما الحل؟
وهدا هو الكود
PHP كود :
 Dim dtEmployee_Table As New DataSet
    Dim daEmployee_Table 
As New SqlDataAdapter

    Private Sub BackgroundWorker1_DoWork
(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles BackgroundWorker1.DoWork
        For Each row 
As DataRow In dtEmployee_Table.Tables(0).Rows
            DataGridView1
.Rows.Add(row.ItemArray)
 
       Next
    End Sub

    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        Control
.CheckForIllegalCrossThreadCalls False
        dtEmployee_Table
.Clear()
 
       daEmployee_Table = New SqlDataAdapter("select * from Employee_Table order by Employee_ID "connSQL)
 
       daEmployee_Table.Fill(dtEmployee_Table)
 
       DataGridView1.ColumnCount dtEmployee_Table.Tables(0).Columns.Count
        With DataGridView1
            
.RowsDefaultCellStyle.SelectionBackColor Color.BlueViolet
            
.RowsDefaultCellStyle.SelectionForeColor Color.White
            
.ColumnHeadersDefaultCellStyle.BackColor Color.SkyBlue
            
.DefaultCellStyle.WrapMode DataGridViewTriState.True
            
.AutoSizeRowsMode DataGridViewAutoSizeRowsMode.AllCells
            
.DefaultCellStyle.Font = New Font("Times New Roman"12FontStyle.Bold)
 
           .ColumnHeadersDefaultCellStyle.Font = New Font("Times New Roman"12FontStyle.Bold)
 
           .ColumnHeadersDefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(0).DefaultCellStyle.BackColor Color.Azure
            
.Columns(0).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(1).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(2).DefaultCellStyle.Alignment DataGridViewContentAlignment.MiddleCenter
            
.Columns(1).Width 354
            
.Columns(1).HeaderText "إسم الموظف"

 
           .Columns(2).Width 354
            
.Columns(2).HeaderText "الوظـيـفـه"
 
       End With

        Dim dtEM 
As New DataTable
        Dim daEM 
As New SqlDataAdapter("select * from Employee_Table order by Employee_Name "connSQL)
 
       daEM.Fill(dtEM)
 
       ComboBox1.DataSource dtEM
        ComboBox1
.DisplayMember "Employee_Name"


 
       ComboBox1.Text ""
 
       If Not BackgroundWorker1.IsBusy Then
            BackgroundWorker1
.RunWorkerAsync()
 
       End If

 
   End Sub 
استبدل هذا :

PHP كود :
     Private Sub BackgroundWorker1_DoWork(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles BackgroundWorker1.DoWork
        For Each row 
As DataRow In dtEmployee_Table.Tables(0).Rows
            DataGridView1
.Rows.Add(row.ItemArray)
 
       Next
      End Sub 

بهذا :

PHP كود :
        Private Sub BackgroundWorker1_DoWork(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles BackgroundWorker1.DoWork
          DataGridView1
.Rows.Clear()
     
     For Each row As DataRow In dtEmployee_Table.Tables(0).Rows
              DataGridView1
.Rows.Add(row.ItemArray)
 
         Next
        End Sub 

يعني أضف هذا السطر قبل تعبئة الجدول :

PHP كود :
DataGridView1.Rows.Clear() 
(01-10-19, 09:23 PM)asemshahen5 كتب : [ -> ]استبدل هذا :

PHP كود :
     Private Sub BackgroundWorker1_DoWork(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles BackgroundWorker1.DoWork
        For Each row 
As DataRow In dtEmployee_Table.Tables(0).Rows
            DataGridView1
.Rows.Add(row.ItemArray)
 
       Next
      End Sub 

بهذا :

PHP كود :
        Private Sub BackgroundWorker1_DoWork(sender As ObjectAs System.ComponentModel.DoWorkEventArgsHandles BackgroundWorker1.DoWork
          DataGridView1
.Rows.Clear()
     
     For Each row As DataRow In dtEmployee_Table.Tables(0).Rows
              DataGridView1
.Rows.Add(row.ItemArray)
 
         Next
        End Sub 

يعني أضف هذا السطر قبل تعبئة الجدول :

PHP كود :
DataGridView1.Rows.Clear() 

نعم اخي الكود يعمل الان بشكل جيد جدا 
جزاك الله الف خير واسعدك الله في الدارين ورزقك الجنه 
ولكن لي طلب اخر  وهو اني اريد ان اشغل ال Progress bar .
وسؤال اخير : هل لو عندي اكثر من استعلام  يعني 5 استعلامات يتم عرضهم في كومبوبوكس مع 3 استعلامات يتم عرضهم في داتا جريد فيو فهل استخدم 
background  و Progress bar واحد ليهم كلهم ام استخدم واحد لكل استعلام؟
مع اني محرج منك لاني اتعبتك معي 
وجزاكم الله خيرا
راجع هذا المقال بخصوص البروغراس بار

بخصوص السؤال الاخير الافضل وضع BackgroundWorker لكل عملية .

لكنك تستطيع استخدامها لاكثر من عملية و إعادة تخصيص البروغراس بار في كل عملية حيث الماكس الخاص به يكون عدد السجلات الموجودة في الداتا تابيل او الداتا سيت كما في المقال الذي في الاعلى .
(01-10-19, 10:32 PM)asemshahen5 كتب : [ -> ]راجع هذا المقال بخصوص البروغراس بار

بخصوص السؤال الاخير الافضل وضع BackgroundWorker لكل عملية .

لكنك تستطيع استخدامها لاكثر من عملية و إعادة تخصيص البروغراس بار في كل عملية حيث الماكس الخاص به يكون عدد السجلات الموجودة في الداتا تابيل او الداتا سيت كما في المقال الذي في الاعلى .

شكرا اخي 
طبقت ما هو موجود في المقال ولكن ظهرة عندي مشكله اعتقد في هدا السطر
PHP كود :
       ProgressBar1.Maximum dtEmployee_Table.Tables(0).Rows.Count 

المشكله كما في الصوره
[attachment=23077]
الغ -1
الصفحات : 1 2 3