تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
معرفة عدد مرات تكرار الاسم في الداتاقريدفيو
#1
السلام عليكم ورحمة الله وبركاته 
يوجد لدي datagridview1  وبها عدد 20 عمود والعمود رقم 12 يحتوي على الأسماء وأغلبها مكرر سؤالي كيف أقوم بنقل الأسماء إلى datagridview2  وهي خالية من البيانات تحتوي على عمودين فقط الاسم وعدد مرات التكرار علماً أنني استخدمت الكود التالي وبالفعل يقوم بنقل الاسماء الى العمود الأول بدون تكرار  datagridview2  ولكن في العمود الثاني يظهر لي عدد مرات التكرار 0 
جزاكم الله خير


    Private Function foundcount(ByVal t As String, d As DataGridView) As Integer
        Dim fc As Integer = 0
        Dim rowscount As Integer = d.Rows.Count - IIf(d.AllowUserToAddRows, 2, 1)
        For i As Integer = 0 To rowscount
            Dim m As String = d.Rows(i).Cells(0).Value
            If m.ToString.ToLower = t.ToString.ToLower Then
                fc += 1
            End If
        Next
        Return fc
    End Function


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If dg.Rows.Count = 0 Then Exit Sub
        Dim rowscount As Integer = dg.Rows.Count - IIf(dg.AllowUserToAddRows, 2, 1)
        For i As Integer = 0 To rowscount
            Dim tn As String = dg.Rows(i).Cells(0).Value
            Dim f As Integer = foundcount(tn.ToString.ToLower, dg)
            Dim found As Integer = foundcount(tn, d2)
            If found = 0 Then
                d2.Rows.Add(tn.ToString.ToLower, f)
            End If
        Next
    End Sub

شكراً من الأعماق استاذ عاصم والله فرجت عني هم كبير وجعل هذا العمل في ميزان حسناتك جالس أحاول من 10 ساعات والمشكلة لم تحل الا بجوابك السريع ما شاء الله تبارك الله ولكن هذا جعلني أطمع في كرمك بسؤال آخر في نفس الموضوع حيث يوجد في العمود رقم 13 اسم الشركة التي ينتمي لها الشخض كيف اقوم بإضافة اسم الشركة في العمود 3 في datagridview2 

أكرر أسفي لكثرة الأسئلة ولكنني جديد في البرمجة ولكم خالص تحياتي
الرد }}}
تم الشكر بواسطة:
#2
(03-02-24, 04:14 PM)صالح عبدالله كتب : السلام عليكم ورحمة الله وبركاته 
يوجد لدي datagridview1  وبها عدد 20 عمود والعمود رقم 12 يحتوي على الأسماء وأغلبها مكرر سؤالي كيف أقوم بنقل الأسماء إلى datagridview2  وهي خالية من البيانات تحتوي على عمودين فقط الاسم وعدد مرات التكرار علماً أنني استخدمت الكود التالي وبالفعل يقوم بنقل الاسماء الى العمود الأول بدون تكرار  datagridview2  ولكن في العمود الثاني يظهر لي عدد مرات التكرار 0 
جزاكم الله خير


    Private Function foundcount(ByVal t As String, d As DataGridView) As Integer
        Dim fc As Integer = 0
        Dim rowscount As Integer = d.Rows.Count - IIf(d.AllowUserToAddRows, 2, 1)
        For i As Integer = 0 To rowscount
            Dim m As String = d.Rows(i).Cells(0).Value
            If m.ToString.ToLower = t.ToString.ToLower Then
                fc += 1
            End If
        Next
        Return fc
    End Function


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If dg.Rows.Count = 0 Then Exit Sub
        Dim rowscount As Integer = dg.Rows.Count - IIf(dg.AllowUserToAddRows, 2, 1)
        For i As Integer = 0 To rowscount
            Dim tn As String = dg.Rows(i).Cells(0).Value
            Dim f As Integer = foundcount(tn.ToString.ToLower, dg)
            Dim found As Integer = foundcount(tn, d2)
            If found = 0 Then
                d2.Rows.Add(tn.ToString.ToLower, f)
            End If
        Next
    End Sub

شكراً من الأعماق استاذ عاصم والله فرجت عني هم كبير وجعل هذا العمل في ميزان حسناتك جالس أحاول من 10 ساعات والمشكلة لم تحل الا بجوابك السريع ما شاء الله تبارك الله ولكن هذا جعلني أطمع في كرمك بسؤال آخر في نفس الموضوع حيث يوجد في العمود رقم 13 اسم الشركة التي ينتمي لها الشخض كيف اقوم بإضافة اسم الشركة في العمود 3 في datagridview2 

أكرر أسفي لكثرة الأسئلة ولكنني جديد في البرمجة ولكم خالص تحياتي



جرب هذا الكود


PHP كود :
Private Sub MoveNamesToDataGridView2()
 
       DataGridView2.Rows.Clear()

 
       Dim nameCountDict As New Dictionary(Of StringInteger)

 
       Dim columnIndex As Integer = -1

        For Each col 
As DataGridViewColumn In DataGridView1.Columns
                columnIndex 
col.Index
                Exit 
For
 
           End If
 
       Next

        If columnIndex 
<> -1 Then
            For Each row 
As DataGridViewRow In DataGridView1.Rows
                Dim name 
As String = If(row.Cells(columnIndex).Value IsNot Nothingrow.Cells(columnIndex).Value.ToString(), "")


 
               If Not String.IsNullOrEmpty(nameThen
                    If nameCountDict
.ContainsKey(nameThen
                        nameCountDict
(name) += 1
                    Else
                        nameCountDict
(name) = 1
                    End 
If
 
               End If
 
           Next

            For Each kvp 
As KeyValuePair(Of StringIntegerIn nameCountDict
                Dim name 
As String kvp.Key
                Dim count 
As Integer kvp.Value
                DataGridView2
.Rows.Add(namecount)
 
           Next
        End 
If
 
   End Sub 

وفي الزر ضع

PHP كود :
MoveNamesToDataGridView2() 
[صورة مرفقة: images?q=tbn:ANd9GcT72OLJW7D1E5QW-HUeWeJ...TGoNeg2jnQ]
الرد }}}
#3
السلام عليكم ورحمة الله وبركاته 

يعطيك العافية استاذ تركي الكود يعمل 100 \ 100 بارك الله فيك 
عندي سؤال أخير لو سمحت وأعتذر لكثرة الأسئلة وهو 
 في نفس الموضوع حيث يوجد في العمود رقم 13 اسم الشركة التي ينتمي لها الشخض كيف اقوم بإضافة اسم الشركة في العمود 3 في datagridview2 
الرد }}}
تم الشكر بواسطة:
#4
الحل كان موجود في مشاركة الأخ المتميز (عاصم):

الكود الذي شارك به الأخ عاصم مع تعديل بسيط عليه
(لا تنسى التعديل على أسماء الأعمدة كي تصل للحل في مشروعك):
كود :
Dim dt As DataTable = New DataTable()
dt = DataGridView1.DataSource()

Dim Arr = From x In dt.AsEnumerable
            Group x By
                c1 = x.Field(Of String)("Name"),
                c2 = x.Field(Of String)("Company")
                Into Group Where Group.Count >= 1
            Select Name = c1, Company = c2, Count = Group.Count

DataGridView2.DataSource = Arr.ToList
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: صالح عبدالله , صالح عبدالله
#5
السلام عليكم ورحمة الله وبركاته 
كلامك صحيح أستاذ طه إجابة الاستاذ عاصم والاستاذ تركي كلاهما صحيحتان وتؤدي نفس والله يبارك لهما وجزاهما الله كل خير على المجهود الذي يبذلانه 
ولكن كما يظهر  في المشاركة الأولى رغبت أن أضيف محتوى الخلية 12 الموجودة في الداتاقريدفيو 1 ( اسم الشخص )  إلى الداتاقريدفيو2  ثم يتم اضافة عدد مرات التكرار  في العمود الثاني وهذا ما قام به الأستاتذة  عاصم وتركي ولكني فكرت في اضافة  اسم الشركة التي ينتمي لها الشخص  للداتاقريدفيو2 علماً بأن اسم الشركة موجود في الخلية رقم 13 في الداتاقريدفيو1
وأتمنى يكون الشرح واضح وآسف للإطالة 

وسوف أجرب الكود الذي أعطيتني اياه وسوف إعلمك بالنتيجة
مع جزيل شكري لك ولإهتمامك
الرد }}}
تم الشكر بواسطة:
#6
وعليكم السلام ورحمة الله وبركاته

في الكود المعدل يكفي فقط أن تضع أسماء الأعمدة ولا تحتاج لأرقمها ولا موضعها..
عدل أسماء الأعمدة في الجزئية التالية من الكود :
كود :
c1 = x.Field(Of String)("Name"),
c2 = x.Field(Of String)("Company")
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة:
#7
السلام عليكم ورحمة الله وبركاته 
الأستاذ طه الكود يعمل بشكل ممتاز ولكن عند عمل فلترة للداتاقريدفيو1 ثم نضغط على الكود الذي قمت بعمله فإن الكود يعمل على البيانات الموجودة الداتاقريدفيو قبل عملية الفلترة 

هذا هو الكود الذي استخدمته في الفلترة 
 Dim strALL As String = " Lajnah Like '*" & (ComboBox2.Text.Trim) & "*'"

        TryCast(DataGridView1.DataSource, DataTable).DefaultView.RowFilter = String.Format(strALL)
الرد }}}
تم الشكر بواسطة:
#8
وعليكم السلام ورحمة الله وبركاته

ملاحظة : قبل الاجابة عن السؤال الاخير ..
في كود الفلترة لا داعي لكتابة String.Format(strALL) يكفي فقط أن تكتب strALL
وإنما (String.Format(strALL)) هو جزء من كود عندي لأغراض تنسيقية وخلافها،،
ولم أنتبه عند نقله هنا أنه يجب حذفها بعد التعديل عليه ليناسب مشروعك..
-----------------------------------------------------------------

الجواب على سؤالك الأخير :

استخدم هذا الكود فإنه يعمل على البيانات بعد الفلترة ..
(لكن بعد عمل التعديلات التي تناسب مشروعك) ..
كود :
Dim dv As New DataView
dv = TryCast(DataGridView1.DataSource(), DataTable).DefaultView

Dim dt As DataTable = New DataTable()
dt = dv.ToTable

Dim Arr = From x In dt.AsEnumerable
            Group x By
                    c1 = x.Field(Of String)("Name"),
                    c2 = x.Field(Of String)("City")
            Into Group Where Group.Count >= 1
            Select Name = c1, Company = c2, Count = Group.Count

DataGridView2.DataSource = Arr.ToList
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
#9
بارك الله فيك أستاذ طه والله عاجز عن الشكر  سهلت لي أمور كثيرة بالتعديل الأخير  كما لا أنسى شكري للأستاذ عاصم والاستاذ تركي بارك الله فيكم جميعاً 
الرد }}}
تم الشكر بواسطة: Taha Okla



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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم