تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[ تمّ الحل ] : إستفسار حول إمكانية تغيير صيغة التّرتيب حسب المجموع
#1
السّلام عليكم و رحمة الله و بركاته
إخواني الأفاضل أرجو المساعدة حول هذه الإشكالية
لاحظوا لو سمحتم البيانات على شبكة الداتاجريد قبل ترتيبها حسب المجموع
كمثال الاسم " عبد العزيز البسكري " يأخذ الرقم 1 حسب الSTUDENT_Id
اللآن بعد الترتيب يصبح الاسم " عبد العزيز البسكري " في الترتيب السادس و هذا صحيح و لكن يتغير الموضع بالداتاجريد
ما أريده هو ان تبقى الأسماء ثابتة حسب ترتيب ال Id
بمعنى يبقى " عبد العزيز البسكري " بالصف الأول على الداتاجريد و يكتب بالعمود الخاص بالترتيب ..  السادس
بارك الله فيكم و لكم و جزاكم خير الجزاء مقدما
تحياتي


الملفات المرفقة
.rar   الترتيب.rar (الحجم : 90.72 ك ب / التحميلات : 11)
قناتنا على اليوتوب
الرد }}}
تم الشكر بواسطة: asemshahen5 , ابراهيم ايبو
#2
PHP كود :
Private Sub Student_Somme_Ranking()
 
       DataGridView1.Sort(DataGridView1.Columns(3), System.ComponentModel.ListSortDirection.Descending)
 
       Dim g As Integer 0
        DataGridView1
.Rows(0).Cells(4).Value Student_Ranking(g)
 
       For i As Integer 1 To DataGridView1.Rows.Count 2
            If DataGridView1
.Rows(1).Cells(3).Value DataGridView1.Rows(i).Cells(3).Value Then
                DataGridView1
.Rows(i).Cells(4).Value DataGridView1.Rows(1).Cells(4).Value.ToString.Split(New Char() {" "})(0) + " مكرّر"
 
               g += 1
                If g 
12 Then Exit For
 
           ElseIf DataGridView1.Rows(i).Cells(3).Value DataGridView1.Rows(1).Cells(3).Value Then
                g 
+= 1
                If g 
12 Then Exit For
 
               DataGridView1.Rows(i).Cells(4).Value Student_Ranking(g)
 
           End If
 
       Next
        DataGridView1
.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
 
   End Sub 

المشكلة بترتيب الاعمدة عندك في كودك اخر سطر اكتب رقم العامود 0 و ليس 1
الرد }}}
#3
السّلام عليكم و رحمة الله و بركاته
مهما عبّر الواحد منّا أخي و أستاذي القدير " عاصم شاهين " لن يفيك حقّك أبدًا .. كفيت و وفيت و أتقنت العمل بامتياز
بارك الله فيك و لك و جزاك خير الجزاء و رزقك من حيث تحتسب و من حيث لاتحتسب
و هو المطلوب بتمامه و كماله و الكمال لله
تحياتي و تقييماتي واحترامي وامتناني لشخصك الكريم
قناتنا على اليوتوب
الرد }}}
تم الشكر بواسطة: asemshahen5 , 3booody , 3booody
#4
هذه الداله من احد الاساتذه وهي صدقه عنه
يمكن للقائمين على المنتدى وضعها في موضوع خاص بها مع قيامهم بشرحها لتعم الفائده للاعضاء والاستاذ صاحب الكود

الافضل وضع هذه الداله ضمن المكتبه dll الخاصه بالمبرمج للتعامل معها في اي مشروع يتم تضمين المكتبه معه
او وضعها في موديول لمناداتها من اي كلاس في المشروع


الداله تتعامل مع الجدول DataTable بعد ان يعبئ بالبيانات وتنادى سواء بالقيمه او المرجع (سيتضح المقصود في طريق التعامل)


قد ترى الكود ليس صغيرا ولكن فيه ثلاث مهام

المهمه الاولى يتاكد من هل الجدول فيه عمود للترتيب
فاذا لم يجده او وجد نوعه ليس نصا فيضيف عمود جديد نصي للترتيب مع اضافت رمز _ لاسم العمود لتلافي تشابه اسماء الاعمده

المهمه الثانيه هو للترتيب

المهمه الثالثه للاختيار بين كلمت "مكرر" وهي الافتراضيه او ترقيم المكرر برقم بين قوسين وهي الاختياريه

الداله
PHP كود :
Public Shared Function OrdinalingDataTableRows(ByRef dataTable As DataTablevalueColumnName As StringordinalColumnName As StringOptional numbering As Boolean False) As DataTable
    If Not dataTable
.Columns.Contains(ordinalColumnNameThen
        dataTable
.Columns.Add(ordinalColumnNameGetType(String))
 
   ElseIf Not dataTable.Columns(ordinalColumnName).DataType Is GetType(String) Then
        dataTable
.Columns.Add(ordinalColumnName "_"GetType(String))
 
       ordinalColumnName ordinalColumnName "_"
 
   End If
 
   Dim dicOrdinals As New Dictionary(Of DoubleString), ordinals = { _
        
"الأول""الثاني""الثالث""الرابع""الخامس""السادس""السابع""الثامن""التاسع""العاشر"_
        
"الحادي عشر""الثاني عشر""الثالث عشر""الرابع عشر""الخامس عشر""السادس عشر""السابع عشر""الثامن عشر""التاسع عشر""العشرين"_
        
"الحادي والعشرين""الثاني والعشرين""الثالث والعشرين""الرابع والعشرين""الخامس والعشرين""السادس والعشرين""السابع والعشرين""الثامن والعشرين""التاسع والعشرين""الثلاثين"}
 
   Dim values = (From x In dataTable.Rows Order By x(valueColumnNameDescending Select x(valueColumnNameDistinct).ToArray
    For index 
0 To ordinals.Count 1
        If index 
values.Count Then Exit For
 
       dicOrdinals.Add(values(index), ordinals(index))
 
   Next
    Array
.ForEach(dataTable.Rows.OfType(Of DataRow).ToArraySub(As DataRowr(ordinalColumnName) = DBNull.Value)
 
   For Each row As DataRow In dataTable.Rows
        Dim value 
row(valueColumnName)
 
       Dim ors row(ordinalColumnName)
 
       Dim count = (From x In dataTable.Rows Where Not IsDBNull(x(ordinalColumnName)) AndAlso x(valueColumnName) = value).Count
        Dim v 
row(valueColumnName)
 
       If dicOrdinals.ContainsKey(row(valueColumnName)) Then
            row
(ordinalColumnName) = dicOrdinals(row(valueColumnName))
 
           If count 0 Then
                If numbering Then
                    row
(ordinalColumnName) &= Space(1) & "(" count ")"
 
                   For Each row2 As DataRow In dataTable.Rows
                        If Not IsDBNull
(row2(ordinalColumnName)) AndAlso row2(ordinalColumnName).Equals(dicOrdinals(row(valueColumnName))) Then
                            row2
(ordinalColumnName) &= Space(1) & "(1)"
 
                       End If
 
                   Next
                Else
                    row
(ordinalColumnName) &= Space(1) & "(مكرر)"
 
               End If
 
           End If
 
       End If
 
   Next
    Return dataTable
End 
Function 

التعامل معها بالمرجع
بعد تعبئت كائن الجدول dt بالبيانات
يكفي ان ترسل للداله اسم كائن الجدول واسم عمود القيم واسم العمود الخاص بالترتيب
(واختياريا يمكن ان تجعل التكرار رقمي باضاف True)
PHP كود :
' يجب ان تعبئ كائن الجدول dt بالبيانات قبل استدعاء الداله
OrdinalingDataTableRows(dt, "STUDENT_Notes", "STUDENT_Ranking") 
او
PHP كود :
' يجب ان تعبئ كائن الجدول dt بالبيانات قبل استدعاء الداله
OrdinalingDataTableRows(dt, "STUDENT_Notes", "STUDENT_Ranking", True) 

التعامل بالقيمه
بان تربط مصدر بيانات الداتاجريدفيو بها مباشره بعد تعبئت الجدول بالبيانات
PHP كود :
' يجب ان تعبئ كائن الجدول dt بالبيانات قبل استدعاء الداله
Me.DataGridView1.DataSource = OrdinalingDataTableRows(dt, "STUDENT_Notes", "STUDENT_Ranking") 
او
PHP كود :
' يجب ان تعبئ كائن الجدول dt بالبيانات قبل استدعاء الداله
Me.DataGridView1.DataSource = OrdinalingDataTableRows(dt, "STUDENT_Notes", "STUDENT_Ranking", True) 
الرد }}}
#5
السلام عليكم و رحمة الله و بركاته
بارك الله فيك و جزاك خير الجزاء أخي الكريم على هذه الدالة و هذا المساعدة .. زادها الله بموازين حسناتك إن شاء الله
فقط لو سمحت هل من الممكن وضعها بنفس ملفي المرفق
لأنّي ربما لم أعرف التعامل معها بشكل سليم
لاحظ أخي الكريم الصورة المؤشّر عليها بالسهم الأحمر و هي الدالة المعنية
نجد أنّ السادس تكرّر 3 مرّات .. 6-6-6 و لذلك من المفروض ألاّ يكون هناك ثامن
كود :
  Dim Cmd = New OleDbCommand("SELECT * From TBL_STUDENT", Conne_2019)
           Dim Da = New OleDbDataAdapter()
           Da.SelectCommand = Cmd
           dt = New DataTable()
           Da.Fill(dt)
           Me.DataGridView2.DataSource = OrdinalingDataTableRows(dt, "STUDENT_Notes", "STUDENT_Ranking")

تحياتي
قناتنا على اليوتوب
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#6
السّلام عليكم و رحمة الله و بركاته
أساتذتي الأكارم .. فضل و ليس أمر
شوفوا معي هذه الإشكالية قد أكون مخطئا بها فقط من أجل الإحتفظ بهذه الدالة أو صرف النظر عنها نهائيا
لأنّ الكود بملفي الأصلي بعد لمسة أخي الغالي " عاصم " يقوم بالمهمة على أحسن ما يكون
و كذلك بالدالة المطروحة من الأخ الكريم أعجبتني بها طريقة الترقيم
مكرّر (1)
مكرّر (2)
لكن الإشكالية مثلما ذكرت بمشاركتي الأخيرة
تحياتي
قناتنا على اليوتوب
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو



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


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