22-04-20, 03:50 PM (آخر تعديل لهذه المشاركة : 12-11-20, 11:42 AM {2} بواسطة عبد العزيز البسكري.)
السّلام عليكم و رحمة الله و بركاته
تسلم أخي العزيز محمد كريّم و سلم يمينك و دينك
زادك الله من علمه و فضله و نفع بك الاسلام و المسلمين
أشكرك جزيل الشكر على الإضافة المميزة و الشرح الوافي
ما شاء الله
صدقني يا غالي .. كل شيء مع أدوات الديف إكسبرس يسير بصورة جد عادية
إلاّ هذه الجريد كنترول ستقضي على ما تبقى لدي من شعرات سود برأسي
لديّ استفسار أخي الكريم .. لو تكرّمت بعد إذنك
عملت تقريبا كل شيء .. بقيت لي فقط قصّة الفاتورة .. أستعمل بها الجريد فيو العاديّة لأنّي تعبت من البحث حول إعتماد الجريد كنترول مع الفاتورة .. بحثت على اليوتوب .. على المواقع الأجنبية و المنتديات و العربية
و لا حياة لمن تنادي
هل يمكن إستبدال الداتاجريد فيو العادية بالجريد كنترول الخاص بالديف إكسبرس . إذا نعم سأعيد التفكير بالأمر بجديّة .. و إذا غير ممكن سأطوي و أمسح الفكرة من فكري نهائيا
لأنّ هذه القصّة أرهقتني فعلا و بكل صدق
أجدّد شكري و احترامي وامتناني لك أخي محمد كريّم و لكل من شاركني الموضوع
سأشرح لك طريقة بسيطة لتفهم الفكرة مبدئيا ثم تطورها بناء على احتياجاتك
المثال بلغة سي شارب
أولا انشئ كلاس جديد لاستخدامه لسطور الفاتورة وليكن اسمه SalesGridLine
أضف للكلاس الخصائص (properties) التي تريدها مثل رقم الصنف واسم اللصنف وسعر البيع واي شيء آخر تريد ادراجه في اعمدة الفاتورة حتى وان لم يكن موجود في نفس الجدول أو حتى في قاعدة البيانات
كود :
// - كلاس موديل خاص بسطور فاتورة المبيعات
class SalesGridLine
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public double ProductQty { get; set; }
public decimal ProductPrice { get; set; }
}
في بداية كلاس الفورم أنشئ قائمة جديدة List من الكلاس السابق
كود :
private List<SalesGridLine> SalesGridDataSource;
هذه القائمة ستكون هي مصدر بيانات الجريد فيو
بناء عليه أضف أعمدة الجريد فيو من المصمم وعدل على خصائص الأعمدة Caption و Field name
في حدث لود الفورم حدد مصدر البيانات
كود :
SalesGridDataSource = new List<SalesGridLine>();
gridview1.DataSource = SalesGridDataSource;
نأتي لجزئية إدراج سطر جديد في الفاتورة - (بالأحرى إضافة كائن SalesGridLine إلى القائمة SalesGridDataSource)
أولا اجلب بيانات الصنف الجديد من فورم البحث أو غيره
قبل الإدراج ابحث عن الصنف الجديد في الفاتورة في حالة كان مدرج مسبقا قم بما يناسبك (أوقف العملية أو زد الكمية)
البحث يكون بمعلومية حقل ثابت ويفضل رقم الصنف إن لم يكن متكرر
كود :
// البحث عن سطر مشابه
for (int i = 0; i < gridview1.DataRowCount; i++)
{
int cellValue = (int)gridview1.GetRowCellValue(i, "ProductId");
if (cellValue == selectedprd.product_id) // قيمة البحث المطابقة للعمود المحدد في السطر السابق
{
// row.Selected = true;
gridview1.FocusedRowHandle = i; // تحديد السطر
line_plus(i); // إضافة كمية
return;
}
}
في حالة لم يكن الصنف مكرر أو كانت الفاتورة خالية من الأسطر
23-04-20, 10:11 PM (آخر تعديل لهذه المشاركة : 12-11-20, 11:47 AM {2} بواسطة عبد العزيز البسكري.)
بارك الله فيك و لك و جزاك خير الجزاء أخي الكريم " محمّد كريّم " و أنعم عليك و على والديك و أهلك و ذويك بما تحب و يحبه الله إن شاء الله
قمت بتحويل كود سيادتك إلى الدوت نت .. لكن ما قدرت أضبّطها
شوف لو تكرمت .. إضغط على زر الأمر بالفورم 1 .. تنفتح الفورم 2 الخاصة بالأصناف و هنا عند الضغط على ال Repository يندرج الصنف الذي تمّ إختياره بالدريد كنترول بالفورم 1
رمضان كريم .. أعادة الله علينا و عليكم بالخير و اليمن و البركة و الصحة و العافية و راحة البال
الكود مشوش لم أعرف أي كود استخدمت وأغلب الأكواد مظللة (ملغية)
بالإضافة إلى أنني لا أستخدم ميكروسوفت أكسس في جهازي فلم يتم الاتصال بقاعدة البيانات للتجربة
أعذر كسلي ولكن صدقني لا أملك الوقت لتصميم قاعدة بيانات للتجربة عليها ولكن سأحاول الليلة تعديل المثال باستخدام بيانات جاهزة (بدون قاعدة بيانات)
عموما الفكرة كالتالي:
عند الضغط على الزر في الجريدفيو في الفورم الثاني يفترض انشاء كائن جديد من الكلاس SalesGridLine وتملئ حقوله بالبيانات من السطر المحدد
ثم تعيد الكائن إلى الفورم الأول وتدرجه في القائمة SalesGridDataSource
العملية الأخيرة تكون في الفورم الأول
لاحظ أنني أتحدث عن List كما في ردي السابق وليس DataTable كما في الملف المرفق
الحقيقة أنا لست خبير في فيجول بيسك ولا أكاد أفهم صيغة كتابتها ووصفها
بالإضافة لمشكلة قاعدة بيانات الأكسس التي لم تشتغل معي فاضطررت إلى بناء مصدر بيانات محاكي للجدول بالكود
لذا عليك التغيير في الكود والغاء تظليل كود التصال بقاعدة البيانات والاستعلام وتظليل كود الداتا تايبل الخاص بالمثال
كذلك يجب تعديل خانة field name في جريدفيو الفورم 1
أضفت عمود ProductId وغيرت خاصية الظهور إلى مخفي visible في جريدفيو فورم1
فورم1 :
كود :
Public Class XtraForm1
Dim SalesGridDataSource As New List(Of SalesGridLine) 'كود جديد
Private Sub XtraForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GridControl1.DataSource = SalesGridDataSource 'كود جديد
End Sub
Sub New()
InitializeComponent()
DevExpress.Skins.SkinManager.EnableFormSkins()
DevExpress.UserSkins.BonusSkins.Register()
DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = "Caramel"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'كود جديد
Dim frm As New XtraForm2
If (frm.ShowDialog() = DialogResult.OK) Then
SalesGridDataSource.Add(frm.TheSelectedRow)
GridControl1.RefreshDataSource()
' GridView1.MoveLast()
End If
End Sub
End Class
فورم2 :
كود :
Imports System.Data
Imports System.Reflection
Imports DevExpress.Skins
Imports DevExpress.LookAndFeel
Imports DevExpress.UserSkins
Imports DevExpress.XtraEditors
Imports DevExpress.XtraGrid.Views.BandedGrid
Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraEditors.DXErrorProvider
Imports DevExpress.XtraEditors.Repository
Imports DevExpress.XtraReports.UI
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Columns
Public Class XtraForm2
Dim ds, dt As DataSet
Public rowSelect As DataRow = Nothing
Public TheSelectedRow As New SalesGridLine
Private Sub XtraForm2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.MaximumSize = Me.Size
Me.MinimumSize = Me.Size
'ألغ تظليل أسطر قاعدة البيانات
' Call Sondoss_Connection()
' Global_Fill_GridControl(GridControl1, "SELECT ITEMS_Code,ITEMS_Name,ITEMS_Unite,ITEMS_Date_Expire,ITEMS_Prix_Vente,ITEMS_Stock From TBL_ITEMS Order By ITEMS_Code")
' Call Flex_DataGridView_Header_Text(GridView1)
'ظلل كود داتاتيبل التجربة
Dim dt As DataTable = New DataTable()
'dt.Columns.AddRange(New DataColumn(5) {New DataColumn("كود الصنف"), New DataColumn("اسم الصنف"), New DataColumn("الوحدة"), New DataColumn("السعر الإفرادي"), New DataColumn("الكمية"), New DataColumn("السعر الإجمالي")})
dt.Columns.Add(New DataColumn("ITEMS_Code"))
dt.Columns.Add(New DataColumn("ITEMS_Name"))
dt.Columns.Add(New DataColumn("ITEMS_Unite"))
dt.Columns.Add(New DataColumn("ITEMS_Date_Expire"))
dt.Columns.Add(New DataColumn("ITEMS_Prix_Vente"))
dt.Columns.Add(New DataColumn("ITEMS_Stock"))
dt.Columns.Add(New DataColumn("ITEMS_Total"))
Dim Dr As DataRow = dt.NewRow()
Dr("ITEMS_Code") = 1
Dr("ITEMS_Name") = "صنف1"
Dr("ITEMS_Unite") = "وحدة1"
Dr("ITEMS_Date_Expire") = DateTime.Today.AddDays(30)
Dr("ITEMS_Prix_Vente") = 12
Dr("ITEMS_Stock") = 45
Dr("ITEMS_Total") = 12
Public Sub Flex_DataGridView_Header_Text(ByVal DGV As DevExpress.XtraGrid.Views.Grid.GridView)
If DGV.RowCount > 0 Then
With DGV
.Columns(0).Width = 90
.Columns(1).Width = 90
.Columns(2).Width = 90
.Columns(3).Width = 90
.Columns(4).Width = 90
.Columns(5).Width = 90
End With
End If
End Sub
Private Sub RepositoryItemButtonEdit3_Click(sender As Object, e As EventArgs) Handles RepositoryItemButtonEdit3.Click
TheSelectedRow.ProductName = GridView1.GetRowCellValue(GridView1.FocusedRowHandle, "ITEMS_Name")
'TheSelectedRow.ProductBarcode = GridView1.GetRowCellValue(GridView1.FocusedRowHandle, "ITEMS_Code")
TheSelectedRow.ProductCode = GridView1.GetRowCellValue(GridView1.FocusedRowHandle, "ITEMS_Code")
TheSelectedRow.ProductPriceVente = GridView1.GetRowCellValue(GridView1.FocusedRowHandle, "ITEMS_Prix_Vente")
TheSelectedRow.ProductQty = 1
TheSelectedRow.ProductStock = GridView1.GetRowCellValue(GridView1.FocusedRowHandle, "ITEMS_Stock")
TheSelectedRow.ProductUnite = GridView1.GetRowCellValue(GridView1.FocusedRowHandle, "ITEMS_Unite")
Me.DialogResult = DialogResult.OK
'Me.Dispose()
End Sub
Private Sub GridView1_InitNewRow(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs)
Dim view As GridView = TryCast(sender, GridView)
view.SetRowCellValue(e.RowHandle, view.Columns(0), 1)
view.SetRowCellValue(e.RowHandle, view.Columns(1), 2)
view.SetRowCellValue(e.RowHandle, view.Columns(2), 3)
End Sub
24-04-20, 04:11 AM (آخر تعديل لهذه المشاركة : 24-04-20, 04:17 AM {2} بواسطة ابو ليلى.)
السلام عليكم و رحمة الله و بركاته جرب المرفق و اذا لم يفتح معك خذ الاكواد من داخله جرى تعديل على اسماء الاعمدة في القريد - ضبط اسماء الحقول لسهولة الوصول اليها - جرى تخصيص حقل الكمية و سعر المادة و الاجمالي كمربعات نصوص للتعامل معها. التعديلات في الفورم الاول فقط.