يا حلا،
أول شيء لازم تصلح بعد اعدادت الفورم.
اذا كانت النية لجعل الداتاجريدفيو ذات واجهة من اليمين لليسار RightToLeft فالأفضل تكون إعدادت واجهة الفورم من اليمين لليسار عن طريق الخاصية RightToLeft وRightToLeftLayot معاً، طبعاً الأدوات سوف ترث هذه الإعدادات تلقائيا.
الآن يجب ضبط RightToLeftLayot على القيمة Yes (وهذا السبب الأول للمشكلة)
اذا كانت النية عدم ظهور بعض الأعمدة فلا داعي لقرائتها من الأساس
بسبب اخفاء بعض الأعمدة تسبب في ارباك عمل الكود اللي وضعته في ردي السابق (وهذا السبب الثاني للمشكلة)
الأفضل أن يكون وضع نمط عرض العمود الأخير (الظاهر طبعاً) من النوع (Fill) من خلال خصائص العمود وليس يدويا ولكن بشكل استثناءي لمشروعك يمكن وضع هذا الكود بعد أكواد اضافة الأعمدة في الداتاجريدفيو
PHP كود :
DG1.Columns((From x As DataGridViewColumn In DG1.Columns Where x.Visible).Last.Index).AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
وهذا الكود بعد التعديل لاحتساب الأعمدة الظاهرة التي تسبق العمود المقصود للمحاذات تحته
PHP كود :
Private Sub DG1_ColumnWidthChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles DG1.ColumnWidthChanged
Dim columnIndex = TryCast(sender, DataGridView).Columns("القسط").Index
Dim w As Integer = (From x As DataGridViewColumn In TryCast(sender, DataGridView).Columns Where x.Index < columnIndex And x.Visible Select x.Width).Sum
LSumMoney.Left = sender.Left + sender.RowHeadersWidth + w
LSumMoney.Width = sender.Columns(columnIndex).Width
End Sub
أنصح بعدم استخدام هذا الأسلوب في محاذاة اداة إظهار الناتج أو غير ذلك لأنها سوف تسبب ارتباك للبرنامج عند العميل لو قام بتصغير حجم الفورم وظهور مسطرة التمرير للداتاجريدفيو فتكون المحاذاة مختلفة تماماً.
أنصح بعدم تجهيز اعمدة الداتاجريد بشكل يدوي لأنه مرهق وخصوصاً عند القيام بتعديلات على البرنامج فيما بعد وأيضاً ستزيد من تعقيد البرمجة.
عدلت المرفق وعملت Form1 أرجو الإطلاع عليه.