29-02-20, 07:22 PM
تفقيط المبالغ المالية داخل صفوف القريد و خارجها و اظهارها كـ تلميح
السلام عليكم و رحمة الله و بركاته
منذ فترة طلب مني تفقيط للمبالغ المالية داخل صفوف القريد .
نظراً لان المبالغ كبيرة و قد تحدث قراءة خاطئة لها .
و كذلك نص التفقيط سيكون كبيراً مما سيسبب تشويه داخل القريد.
فجائت فكرة ادراج التفقيط كتلميح عبر ToolTipController, عند الوقوف على اي قيمة مالية يظهر التفقيط كنص تلميحي.
فكان الحل لهذه الفكرة كما يلي:
ندرج اداة ToolTipController التابعة لـ DevExpress ونضبط بعض الخصائص لها
AutoPopDelay=8000
intialdelay=100
ToolTipStyle=Windows7
ToolTipType=SuperTip
طبعاً هذه الخصائص تعود لرغبتك .
ثم نضبط خاصية ToolTipController الخاصة بـ GridControl الى ToolTipController1 .
بعد ذلك ندخل الى الحدث ToolTipController1_GetActiveObjectInfo لنكتب الكود الخاص بالعملية :
PHP كود :
Private Sub ToolTipController1_GetActiveObjectInfo(sender As Object, e As DevExpress.Utils.ToolTipControllerGetActiveObjectInfoEventArgs) Handles ToolTipController1.GetActiveObjectInfo
If e.SelectedControl Is GridControl1 Then
Dim view As GridView = GridControl1.GetViewAt(e.ControlMousePosition)
If view Is Nothing Then Exit Sub
Dim info As GridHitInfo = view.CalcHitInfo(e.ControlMousePosition)
If info.Column Is Nothing Then Return
If info.Column.Name = "Prc_Coast" Then
If info.InRowCell Then
Dim text As String = view.GetRowCellDisplayText(info.RowHandle, info.Column)
Dim cellKey As String = info.RowHandle.ToString() & " - " & info.Column.ToString()
e.Info = New DevExpress.Utils.ToolTipControlInfo(cellKey, Tafkeet(text))
End If
Dim hi As GridHitInfo = view.CalcHitInfo(e.ControlMousePosition)
'تلميح التفقيط في الفوتر
If hi.HitTest = GridHitTest.Footer Then
Dim text As String = info.Column.SummaryText
Dim cellKey As String = info.RowHandle.ToString() & " - " & info.Column.ToString()
e.Info = New DevExpress.Utils.ToolTipControlInfo(cellKey, Tafkeet(text))
End If
'تلميح التفقيط بعد التجميع
If hi.HitTest = GridHitTest.RowFooter Then
Dim text As String = view.GetRowFooterCellText(info.RowHandle, info.Column)
Dim cellKey As String = info.RowHandle.ToString() & " - " & info.Column.ToString()
e.Info = New DevExpress.Utils.ToolTipControlInfo(cellKey, Tafkeet(text))
End If
End If
End If
'تلميح التفقيط مربعات نصوص
If e.SelectedControl Is Txt_Pro_Coast Then
e.Info = New DevExpress.Utils.ToolTipControlInfo(Txt_Pro_Coast, Tafkeet(Txt_Pro_Coast.EditValue))
ElseIf e.SelectedControl Is Txt_Pro_Akttab Then
e.Info = New DevExpress.Utils.ToolTipControlInfo(Txt_Pro_Akttab, Tafkeet(Txt_Pro_Akttab.EditValue))
End If
End Sub
الكود يقسم الى اربع اقسام:
القسم الاول: نحدد فيه العمود المستهدف المراد تفقط قيم الخلايا بداخله و هو هنا Prc_Coast
يمكنك تفقيط اكثر من عمود اذا احببت.
القسم الثاني:يخص عمليات التجميع في الفوتر الخاص بالقريد .
القسم الثالث: يخص عمليات التجميع حسب فئة محددة (اذا كانت القريد معدة للتجميع حسب عمود معين).
القسم الرابع:هو لتفقيط مربعات نصوص على النموذج.
بالنسبة للدالة Tafkeet فهي كما يلي:
PHP كود :
'دالة التفقيط
Private Function Tafkeet(Value As String) As String
If Value Is Nothing Then Return Nothing
Dim MER As New mero5000.mero
If Value.Contains(",") Then Value = Value.Replace(",", "")
Dim Result As String = String.Empty
Result = MER.mero5000(If(Long.TryParse(Value, Nothing), Value, 0))
Return Result
End Function
تم استخدام كلاس التفقيط الخاص بالاخ Mero5000 , يمكنك استخدام اي كلاس للتفقيط لديك المهم في الموضوع هو الفكرة.
الدالة تزيل الفواصل ان وجدت داخل الخلايا لانني استخدم تنسيق خاص للمبالغ يفصل بين المراتب , يمكنك التعديل على الدالة اذا كانت الارقام لديك تخلو من الفواصل.
بمجرد مرور الماوس على الحقل المستهدف سيظهر لك التلميح كما في الصور التالية
صور توضيحية
من داخل القريد
![](https://i.imgur.com/Z3mb4P0.png)
مربعات نصوص
![](https://i.imgur.com/m5FJDeQ.png)
بالتوفيق للجميع
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال