27-10-19, 08:13 AM
هذه الداله من احد الاساتذه وهي صدقه عنه
يمكن للقائمين على المنتدى وضعها في موضوع خاص بها مع قيامهم بشرحها لتعم الفائده للاعضاء والاستاذ صاحب الكود
الافضل وضع هذه الداله ضمن المكتبه dll الخاصه بالمبرمج للتعامل معها في اي مشروع يتم تضمين المكتبه معه
او وضعها في موديول لمناداتها من اي كلاس في المشروع
الداله تتعامل مع الجدول DataTable بعد ان يعبئ بالبيانات وتنادى سواء بالقيمه او المرجع (سيتضح المقصود في طريق التعامل)
قد ترى الكود ليس صغيرا ولكن فيه ثلاث مهام
المهمه الاولى يتاكد من هل الجدول فيه عمود للترتيب
فاذا لم يجده او وجد نوعه ليس نصا فيضيف عمود جديد نصي للترتيب مع اضافت رمز _ لاسم العمود لتلافي تشابه اسماء الاعمده
المهمه الثانيه هو للترتيب
المهمه الثالثه للاختيار بين كلمت "مكرر" وهي الافتراضيه او ترقيم المكرر برقم بين قوسين وهي الاختياريه
الداله
التعامل معها بالمرجع
بعد تعبئت كائن الجدول dt بالبيانات
يكفي ان ترسل للداله اسم كائن الجدول واسم عمود القيم واسم العمود الخاص بالترتيب
(واختياريا يمكن ان تجعل التكرار رقمي باضاف True)
او
التعامل بالقيمه
بان تربط مصدر بيانات الداتاجريدفيو بها مباشره بعد تعبئت الجدول بالبيانات
او
يمكن للقائمين على المنتدى وضعها في موضوع خاص بها مع قيامهم بشرحها لتعم الفائده للاعضاء والاستاذ صاحب الكود
الافضل وضع هذه الداله ضمن المكتبه dll الخاصه بالمبرمج للتعامل معها في اي مشروع يتم تضمين المكتبه معه
او وضعها في موديول لمناداتها من اي كلاس في المشروع
الداله تتعامل مع الجدول DataTable بعد ان يعبئ بالبيانات وتنادى سواء بالقيمه او المرجع (سيتضح المقصود في طريق التعامل)
قد ترى الكود ليس صغيرا ولكن فيه ثلاث مهام
المهمه الاولى يتاكد من هل الجدول فيه عمود للترتيب
فاذا لم يجده او وجد نوعه ليس نصا فيضيف عمود جديد نصي للترتيب مع اضافت رمز _ لاسم العمود لتلافي تشابه اسماء الاعمده
المهمه الثانيه هو للترتيب
المهمه الثالثه للاختيار بين كلمت "مكرر" وهي الافتراضيه او ترقيم المكرر برقم بين قوسين وهي الاختياريه
الداله
PHP كود :
Public Shared Function OrdinalingDataTableRows(ByRef dataTable As DataTable, valueColumnName As String, ordinalColumnName As String, Optional numbering As Boolean = False) As DataTable
If Not dataTable.Columns.Contains(ordinalColumnName) Then
dataTable.Columns.Add(ordinalColumnName, GetType(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 Double, String), ordinals = { _
"الأول", "الثاني", "الثالث", "الرابع", "الخامس", "السادس", "السابع", "الثامن", "التاسع", "العاشر", _
"الحادي عشر", "الثاني عشر", "الثالث عشر", "الرابع عشر", "الخامس عشر", "السادس عشر", "السابع عشر", "الثامن عشر", "التاسع عشر", "العشرين", _
"الحادي والعشرين", "الثاني والعشرين", "الثالث والعشرين", "الرابع والعشرين", "الخامس والعشرين", "السادس والعشرين", "السابع والعشرين", "الثامن والعشرين", "التاسع والعشرين", "الثلاثين"}
Dim values = (From x In dataTable.Rows Order By x(valueColumnName) Descending Select x(valueColumnName) Distinct).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).ToArray, Sub(r As DataRow) r(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 + 1 & ")"
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)
