المشاركات : 281
المواضيع 74
الإنتساب : Sep 2018
السمعة :
5
الشكر: 228
تم شكره 325 مرات في 179 مشاركات
السلام عليكم اخوتي
عندي استعلام يعمل بشكل جيد عند وضعه في زر
ولكن عند وضعه في ال BackgroundWorker لايعمل
اين الخطأ اخوتي
ارجو ان اجد الحل
وهدا هو الكود المستخدم
PHP كود :
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles 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", 12, FontStyle.Bold) .ColumnHeadersDefaultCellStyle.Font = New Font("Times New Roman", 12, FontStyle.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 Object, e As EventArgs) Handles Button1.Click Control.CheckForIllegalCrossThreadCalls = False If Not BackgroundWorker1.IsBusy Then BackgroundWorker1.RunWorkerAsync() End If
End Sub
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
28-09-19, 08:48 PM
(آخر تعديل لهذه المشاركة : 28-09-19, 08:50 PM {2} بواسطة asemshahen5.)
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
المشاركات : 281
المواضيع 74
الإنتساب : Sep 2018
السمعة :
5
الشكر: 228
تم شكره 325 مرات في 179 مشاركات
(28-09-19, 08:48 PM)asemshahen5 كتب : محتاج التعديل على الكود backgroundworker mysql progressbar
[مشروع] مثال للعمل مع الـBackgroundWorker
اشكرك اخي asemshahen5
ولكن اخي بحثت كثيرا علي النت وكل الفيديوهات بتتكلم عن ال Backgroundworker وطريقة عملها مع عداد بيعد من 1 الي 1000 او اكثر
ولكن لا يوجد اي فيديو بيتكلم عن ال Backgroundworker مع الاستعلام
وجربت اكثر من طريقه ولا تكتمل
ارجو من حضرتك او الاخوه الاطلاع والتعديل علي الكود
اكون شاكر جدا وجزاكم الله خيرا
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
PHP كود :
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles 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 Object, e As EventArgs) Handles 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", 12, FontStyle.Bold) .ColumnHeadersDefaultCellStyle.Font = New Font("Times New Roman", 12, FontStyle.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
فقط غيير الاستعلام لاسماء جدولك و اعمدتك .
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
المشاركات : 281
المواضيع 74
الإنتساب : Sep 2018
السمعة :
5
الشكر: 228
تم شكره 325 مرات في 179 مشاركات
(01-10-19, 05:21 AM)asemshahen5 كتب : PHP كود :
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles 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 Object, e As EventArgs) Handles 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", 12, FontStyle.Bold) .ColumnHeadersDefaultCellStyle.Font = New Font("Times New Roman", 12, FontStyle.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 Object, e As System.ComponentModel.DoWorkEventArgs) Handles 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 Object, e As EventArgs) Handles 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", 12, FontStyle.Bold) .ColumnHeadersDefaultCellStyle.Font = New Font("Times New Roman", 12, FontStyle.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
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
استبدل هذا :
PHP كود :
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles 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 Object, e As System.ComponentModel.DoWorkEventArgs) Handles 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()
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
المشاركات : 281
المواضيع 74
الإنتساب : Sep 2018
السمعة :
5
الشكر: 228
تم شكره 325 مرات في 179 مشاركات
(01-10-19, 09:23 PM)asemshahen5 كتب : استبدل هذا :
PHP كود :
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles 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 Object, e As System.ComponentModel.DoWorkEventArgs) Handles 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 واحد ليهم كلهم ام استخدم واحد لكل استعلام؟
مع اني محرج منك لاني اتعبتك معي
وجزاكم الله خيرا
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
راجع هذا المقال بخصوص البروغراس بار
بخصوص السؤال الاخير الافضل وضع BackgroundWorker لكل عملية .
لكنك تستطيع استخدامها لاكثر من عملية و إعادة تخصيص البروغراس بار في كل عملية حيث الماكس الخاص به يكون عدد السجلات الموجودة في الداتا تابيل او الداتا سيت كما في المقال الذي في الاعلى .
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
المشاركات : 281
المواضيع 74
الإنتساب : Sep 2018
السمعة :
5
الشكر: 228
تم شكره 325 مرات في 179 مشاركات
(01-10-19, 10:32 PM)asemshahen5 كتب : راجع هذا المقال بخصوص البروغراس بار
بخصوص السؤال الاخير الافضل وضع BackgroundWorker لكل عملية .
لكنك تستطيع استخدامها لاكثر من عملية و إعادة تخصيص البروغراس بار في كل عملية حيث الماكس الخاص به يكون عدد السجلات الموجودة في الداتا تابيل او الداتا سيت كما في المقال الذي في الاعلى .
شكرا اخي
طبقت ما هو موجود في المقال ولكن ظهرة عندي مشكله اعتقد في هدا السطر
PHP كود :
ProgressBar1.Maximum = dtEmployee_Table.Tables(0).Rows.Count - 1
المشكله كما في الصوره
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
الغ -1
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
|