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

نسخة كاملة : تجميع العناصر المتشابهة في الداتاجريد الاولي في جريد ثانية
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3
(15-05-18, 10:12 PM)atefkhalf2004 كتب : [ -> ]اسف للتاخير   لما اضغط button1 يعمل البيانات في جريد2    شكرا كثيرا لكم


تفضل اخى الفاضل الطريقة بنائاً على مشروعك


أولاً انت عندك داخل منطقة الاكواد SUB باسم
كود :
Sub fillcombo4()

كل الفكرة هيتم انشاء واحد تانى بنفس الفكرة وهيكون كوده التالى

كود :
Sub fillcombo3()

       If objconn.State = ConnectionState.Closed Then objconn.Open()
       Sql = "SELECT MAX(invon), MAX(invdat), invcmn, SUM(invtol), MAX(sup_no), MIN(invser), MAX(invdiscount), MAX(invnettotal), MAX(supcod) FROM adpurhd GROUP BY invcmn"
       Dp = New OleDbDataAdapter(Sql, objconn)
       Dp.Fill(ds, "adpurhd")
       objconn.Close()
       ComboBox4.DataBindings.Clear()
       ComboBox4.Items.Clear()
       For i As Integer = 0 To Me.BindingContext(ds, "adpurhd").Count - 1
           Dim AddStr As String = ds.Tables("adpurhd").Rows(i).Item("invon").ToString
           If AddStr <> "" Then ComboBox4.Items.Add(AddStr)
       Next
       ComboBox4.Text = ""

   End Sub

حتى الان جميل ومفيش اى مشكلة

شفت الكود اللى انت عملته فى منطقة Form1_Load
كل اللى انا عملته اخت منه نسخة 
ورحت على الزر المطلوب عند الضغط عليه يعرض طريقة الداتا

وقم بوضع الكود التالى بداخل (Button1_Click)
كود :
fillcombo3()
       tempTable.Columns.Add("المجموعة", GetType(String))
       tempTable.Columns.Add("الشركة", GetType(String))

       tempTable.Columns.Add("كود الصنف", GetType(Integer))

       tempTable.Columns.Add("رقم الصنف", GetType(String))

       tempTable.Columns.Add("اسم الصنف", GetType(String))
       tempTable.Columns.Add("الوحدة", GetType(String))
       tempTable.Columns.Add("الكمية", GetType(Decimal))
       tempTable.Columns.Add("السعر", GetType(Decimal))
       tempTable.Columns.Add("الاجمالي", GetType(Decimal))
       tempTable.Columns.Add("الخصم", GetType(Decimal))
       Me.DataGridView2.AutoGenerateColumns = False
       Me.DataGridView2.AllowUserToResizeColumns = False
       Me.DataGridView2.DataSource = tempTable

ايه الاختلاف هنا بين لما المشروع يفتح وبين لما اضغط على الزر فقط جملة
كود :
ى منطقة Load
fillcombo4()

فى منطقة Button
fillcombo3()

طيب انت محتاج تخلى لما المشروع يفتح يعرض فى DataGridView1 الداتا كلها
ولما اضغط على الزر يعرض الداتا جروب فى DataGridView2

كل الفكرة السطر ده
كود :
Me.DataGridView2.DataSource = tempTable

قم بتغيير رقم 2 ما بين 1 و 2
حسب ترتيباتك

اتمنى تكون الفكرة بسيطة والشرح واضح

وانا اسف لم اقدر اعمل على مشروعك وتعديل الكود وارفاق الملف بالمرفقات
أولاً احبب دائماً التعليم وان تستفيد من الفكرة والطريقة
ثانياً اختلاف اصدار النسخة الى عندك وعندى

تمنياتى لك التوفيق
للاسف أخى أنت تصعب الأمور على نفسك 

عموما هذا الكود سيعطيك ما تريد بشكل بسيط 

كود :
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim query = From row In DataGridView2.Rows.Cast(Of DataGridViewRow)() Group row By رقم_الصنف = row.Cells(3).Value Into ItemGroup = Group
                   Select New With {Key .المجموعة = ItemGroup.Min(Function(r) r.Cells(0).Value),
                                    Key .الشركة = ItemGroup.Min(Function(r) r.Cells(1).Value),
                                    Key رقم_الصنف,
                                    Key .اسم_الصنف = ItemGroup.Min(Function(r) r.Cells(4).Value),
                                    Key .الوحدة = ItemGroup.Min(Function(r) r.Cells(5).Value),
                                    Key .الكمية = ItemGroup.Sum(Function(r) r.Cells(6).Value),
                                    Key .السعر = ItemGroup.Min(Function(r) r.Cells(7).Value),
                                    Key .الاجمالي = ItemGroup.Sum(Function(r) r.Cells(8).Value),
                                    Key .الخصم = ItemGroup.Average(Function(r) r.Cells(9).Value)}
       DataGridView1.AutoGenerateColumns = False
       DataGridView1.DataSource = query.ToArray
   End Sub


فقط غير اسم عمودى رقم الصنف و اسم الصنف الى الاسم الموجود بالكود (استحدم _ بدلا من المسافة )
شكرا لكم جميعا  افدتوني وافدتم الجميع  شكرا لكم
بسم الله الرحمن الرحيم
منذ حذفي لمشاركتي الاولى وانا اجهد عقلي و احاول لكي اجد حل مناسب لطلب الاخ ....واول خيط عرفت من خلاله الحل وهي ضمن ردود الاخوة هنا بارك الله فيهم وهي عبارة group by فجربت كود استعلام بسيط وتم المطلوب.

قاعدة بياناتي باسم db
جدول1 باسم tb1
جدول2 باسم tb2

محتوى الجدول الاول كما ترون بالصورة التالية:

و الجدول الاخر:


عمود n في جدول2 هو المطلوب  مجموعه عبر sum بشرط تساوي عمود tb1 بجدول tb2 مع عمود tid بجدول tb1

المهم النتيجة هكذا

والتالي اجراء زر الامر
PHP كود :
Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click
        Using con 
As New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=db.accdb")
 
           ' Using da As New OleDb.OleDbDataAdapter("select  [tb1.tname],[tb2.n] from tb1,tb2 where [tb2.tb1]=[tb1.tid]", con)
            Using da As New OleDb.OleDbDataAdapter("select tb1.tname, sum(tb2.n)  from tb1,tb2 where tb2.tb1=tb1.tid group by tname", con)
                Using dt As New DataTable
                    da.Fill(dt)
                    d.DataSource = dt
                    d.Columns(0).HeaderText = "الاسم"
                    d.Columns(1).HeaderText = "عدد الابناء"
                End Using
            End Using
        End Using
    End Sub 
(16-05-18, 03:43 AM)سعود كتب : [ -> ]
بسم الله الرحمن الرحيم
منذ حذفي لمشاركتي الاولى وانا اجهد عقلي و احاول لكي اجد حل مناسب لطلب الاخ ....واول خيط عرفت من خلاله الحل وهي ضمن ردود الاخوة هنا بارك الله فيهم وهي عبارة group by فجربت كود استعلام بسيط وتم المطلوب.

قاعدة بياناتي باسم db
جدول1 باسم tb1
جدول2 باسم tb2

محتوى الجدول الاول كما ترون بالصورة التالية:

و الجدول الاخر:


عمود n في جدول2 هو المطلوب  مجموعه عبر sum بشرط تساوي عمود tb1 بجدول tb2 مع عمود tid بجدول tb1

المهم النتيجة هكذا

والتالي اجراء زر الامر
PHP كود :
Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click
        Using con 
As New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=db.accdb")
 
           ' Using da As New OleDb.OleDbDataAdapter("select  [tb1.tname],[tb2.n] from tb1,tb2 where [tb2.tb1]=[tb1.tid]", con)
            Using da As New OleDb.OleDbDataAdapter("select tb1.tname, sum(tb2.n)  from tb1,tb2 where tb2.tb1=tb1.tid group by tname", con)
                Using dt As New DataTable
                    da.Fill(dt)
                    d.DataSource = dt
                    d.Columns(0).HeaderText = "الاسم"
                    d.Columns(1).HeaderText = "عدد الابناء"
                End Using
            End Using
        End Using
    End Sub 
بص ياجميل
انا باعمل برنامخ مخزن عشان اضيف فيه الاصناف باستخدام اكسس
عملت جدول اسمه items
فيه الاعدمة التالية
code-date-itemsname-price-lowitems-quantity
العمود
lowitems
ببيخزن الكمية الللي مش ينفع يقل عنها المخزون من الصنف
يعني لو وصلت الكمية ليه يبقي يدي انظار او يعطي رسالة ادذار او يتم عرض العناصر اللي وصلت للحد الادني في داتا جريد فيو
يعني زي minimum
انا كنت باستعمل الجملة دي للاستعلام بشرط
select * from items where lowitems > 50

ودي مش هتنفع لان الشرط ده غلط
يعني في صنف الحد الادني ليه 50 قطعة وصنف 100 وصنف 200 وهكذا
يعني الشرط لازم يكون حسب كل صف
ارجو تكون وضحت شوية
الصفحات : 1 2 3