لنفرض مثلا لدي بالمثال التالي المرفق بملف البرنامج انه يوجد لدي القيم التاليه داخل عمود بالاسم : number
5
15
25
نجد ان القيمة 5 واقعه مابين ( 1 الى 10 ) المفترض تحسب 10
نجد ان القيمة 15 واقعه مابين ( 11 الى 20 ) المفترض تحسب 20
نجد ان القيمة 25 واقعه مابين ( 21 الى 30 ) المفترض تحسب 30
نجد ان النتيجه او المخرج كالتالي ( 10 + 20 + 30 ) = 60
اي المفترض المجموع الكلي يساوي 60 .
المطلوب عرض المجموع الكلي للقيم داخل العمود number على حسب الشروط السابقه المستحقه وعرض مجموعها الكلي في العمود او الحقل total الموجود داخل DataGridView2 مع رقم الكود الخاص بالمجموع المستحق
ارجو منكم المساعدة وجزيتو خيراا ووفقكم الله ...المخرجات المطلوبة موجودة بالصورة مع الشرح وتم ارفاق المثال للتعديل والفائدة ولكم كل الشكر .
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
DataGridView1.Columns.Clear()
Using dt As New DataTable
Dim c = New OleDb.OleDbDataAdapter("SELECT [code],SUM((FIX([number]/10)+1)*10) AS [total] FROM [Table1] GROUP BY [code]", My.Settings.Database2ConnectionString).Fill(dt)
DataGridView1.DataSource = dt
End Using
End Sub
04-09-15, 10:09 PM (آخر تعديل لهذه المشاركة : 04-09-15, 10:11 PM {2} بواسطة moh61.)
الاخ khodor1985 المثال الذي ارفقته انت يعمل على جمع القيم داخل الحقل number في الأخر طلعت معي المخرج والناتج 45 وهي مجموع القيم .... وهذا ماهو الشيئ المطلوب من المثال والمفترض ان يكون الناتج 60 وليس 45 وجزاك الله خير لاحظ للصورة اخي بعد تنفيذ برنامجك
04-09-15, 10:42 PM (آخر تعديل لهذه المشاركة : 04-09-15, 10:49 PM {2} بواسطة moh61.)
اخي الطالب كودك صحيح وقام بعمليه جميع على الوجه المطلوب بس المساعدة الابغاها ماهو بالشكل هاذا ابغاه على كود او تشتغلها على جمل ال if condition او Select Case ..... اي شي بالشكل او طريقة اقرب لي هاذا الكود ......... يااخواني المثال مبسط في الشكل التالي بأبسط مما تتخيلون بس يكون في شكل كود عشان اقدر اعتمد على التعديل بعدين ....................
عشان الصورة توضح اكثر دعنا نغير القيم القديمة ونحاول نشتغل على المثال بقيم جديدة
هاذه القيم القديمة
(الارقام من 1الى 10 ) تحسب لها 10
(الارقام من 11 الى 20) تحسب لها 20
(الارقام من 21 الى 30 ) تحسب لها 30
ياريت نشتغل المثال ونحاول فيه بالقيم الجديدة هااااذي
(الارقام من 1الى 10 ) تحسب لها 500
(الارقام من 11 الى 20) تحسب لها 700
(الارقام من 21 الى 30 ) تحسب لها 1000
يعني المفترض الحين الناتج او ال total يطلع معي ((((( 2200 )))))) ....
بحيث اقدر استطيع التغير في الكود مستقبلا كتالي :
(الارقام من 21 الى 30 ) تحسب لها 30 ؟؟؟؟؟؟؟؟؟؟
بدلا عن ( 30 )اسويها (500) ..... يعني المفترض تكون في شكل كود قابل للتعديل علما بأن الحقول داخل الحقل nunber ستكون متغيرة
او مثلا ابغى اضيف شرط جديد زي كذا
(الارقام من 30 الى 100 ) تحسب لها 1000
لسا فس شوية اضافات والشيئ الانت سويته اكثر من رائع بس مارح يعتمد على التعديل او الاضافه مستقبلا .................. وافضل الكود مايكون مربوط دائما بقاعدة البيانات يعتمد فقط على القيم الموجودة داخل DataGridView يعين ياريت ما تتعود تربط الكود دائما بجمل الاتصال بقاعدة البيانات .... خلي يحسب وياخد القيم من DataGRidview وجزاك الله خير ........................... نرجو من الجميع المشاركة والمحاولة للوصول الى المخرج المطلوب وجزاكم الله كل خير
سوف نشتغل المثال على القيم الجديدة هاذي عشان توضح الصورة اكثر
(الارقام من 1الى 10 ) تحسب لها 500
(الارقام من 11 الى 20) تحسب لها 700
(الارقام من 21 الى 30 ) تحسب لها 1000
المخرج او المجموع يكون = 2200 .
تم ارفاق المثال مرة اخرى للتعديل عليه مجددا
اتمنى الصورة تكون وضحت ......................................
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
DataGridView1.Columns.Clear()
Dim dt As New DataTable
Dim sql As String = "SELECT [code], SUM( SWITCH(" &
"VAL([number])>=" & 1 & " AND VAL([number])<=" & 10 & ", " & 500 & "," &
"VAL([number])>=" & 11 & " AND VAL([number])<=" & 20 & "," & 700 & "," &
"VAL([number])>=" & 21 & " and VAL([number])<=" & 30 & ", " & 1000 &
")) AS [total] FROM [Table1] GROUP BY [code]"
Dim c = New OleDb.OleDbDataAdapter(Sql, My.Settings.Database2ConnectionString).Fill(dt)
DataGridView1.DataSource = dt
End Sub
استخدام تقنيت Linq هو الاسلوب الصحيح والحديث،
وانتم اخي خدور ما شاء الله تتقنوها بشكل رائع ومبسط ليس فيها تعقيد كما افعلها،
بارك الله فيكم والى الامام دائما.