الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في إنشاء فاتورة

بدأه النور المبين في 6 فبراير 2012 · 5 رد · 3,445 مشاهدة · في قسم تكنولوجيا Microsoft .NET العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

كنت اسأل قبل فترة عن كيفية الإضافة والتعديل والحذف في قاعدة البيانات عن طريق الـ DataGridView وقد تجاوزت هذه المرحلة حيث وجدت كود في مثال لأحد الأخوة ساعدني في ذلك. ولدي الأن بعض الاستفسارات اكتبها على شكل نقاط ليسهل فهم المطلوب منها إن شاء الله:

- لدي جدولين للفواتير أحدها خاص بالمعلومات الأساسية للفاتورة (الرقم والتاريخ وإجمالي المبلغ)، والجدول الثاني لتفاصيل الفواتير وهي الموجودة في الداتا قريد (رقم كل صنف وكميته وسعره وإجمالي المبلغ للصنف).

السؤال الأول: كيف يمكنني أن اجعل العمود الأول في الداتا قريد وهو عمود مخفي أن يكتب فيه تلقائيا رقم الفاتورة الموجود في التكست بوكس اعلى الفورم؟

020612050248w57t0wgda66gygdsi.jpg

أريد أن الرقم الموجود في تكست بوكس رقم الفاتورة بالأعلى أن ينسخ للعمود رقم واحد بجميع صفوفه، بمعنى أن أي صف جديد تتم إضافته يكتب فيه نفس الرقم تلقائيا.

السؤال الثاني: كيف يمكنني ربط الداتا قريد للبحث في قاعدة البيانات من خلال رقم الصنف، بمعنى أنه بمجرد إدخال رقمالصنف والضغط على زر الإدخال يبحث البرنامج في جدول الأصناف وتظهر معلومات الصنف تلقائيا في الحقول (حقل السعر وربما نضيف حقل البيان أيضا)؟

السؤال الثالث: كيف يمكن جمع قيم عمود المبلغ الإجمالي وإظهار الناتج الكلي في التكست بوكس المسمى الإجمالي الموجود بالأسفل، بمعنى أن يجمع البرنامج أسعار جميع الأصناف في الداتا قريد ويظهر الإجمالي؟

السؤال الرابع: الداتا قريد تستخدم لإدخال البيانات فكيف امنع البرنامج من أن يعرض البيانات الموجودة حاليا في الجدول عند فتح الفورم؟ أي أن يظهر لي الفورم فارغ عند فتحه؟

السؤال الخامس: بالنسبة لاستعراض الفاتورة كيف يمكنني أن اجعل البرنامج يظهر لي أصناف الفاتورة في الداتا قريد من خلال كتابة رقم الفاتورة بالأعلى، بمعنى أننا سابقا أضفنا عمود في الداتا قريد يكتب فيه رقم الفاتورة، وأنا أريد من البرنامج عندما اكتب رقم الفاتورة بالأعلى أن يظهر لي الصفوف التي تحتوي على هذا الرقم نفسه؟

حيث أن الجدول سيحتوي على أصناف جميع الفواتير والرقم هذا هو الذي يميز بأن هذا الصنف تابع لهذه الفاتورة.

ملاحظة: أنا استخدم الفيجوال بيسك 2010 وقواعد البيانات اكسس 2003.

اعتذر عن الإطالة وأتمنى المساعدة من الأخوة لأني بصراحة بحث كثيرا في المواقع العربية والأجنبية ولم أرى أي شيء يتعلق بالفواتير سوى للفيجوال بيسك 6.

شكرا لجميع أعضاء هذا المنتدى المتميز الذي استفدت منه كثيرا.

#2

السلام عليكم.

اقتباس
السؤال الأول: كيف يمكنني أن اجعل العمود الأول في الداتا قريد وهو عمود مخفي أن يكتب فيه تلقائيا رقم الفاتورة الموجود في التكست بوكس اعلى الفورم؟

datagridview.Rows["BillID"] = textbox.text;

حيث i هي السطر الذي تريد وضع القيمة فيه, و BillID هو اسم العمود لرقم الفاتورة, و textbox هو عنصر النص الذي يحتوي على رقم الفاتورة.

اقتباس
السؤال الثاني: كيف يمكنني ربط الداتا قريد للبحث في قاعدة البيانات من خلال رقم الصنف، بمعنى أنه بمجرد إدخال رقمالصنف والضغط على زر الإدخال يبحث البرنامج في جدول الأصناف وتظهر معلومات الصنف تلقائيا في الحقول (حقل السعر وربما نضيف حقل البيان أيضا)؟

تمت الاجابة عن هذا السؤال في المشاركة 2 في السؤال التالي: جلب بيانات

اقتباس
السؤال الثالث: كيف يمكن جمع قيم عمود المبلغ الإجمالي وإظهار الناتج الكلي في التكست بوكس المسمى الإجمالي الموجود بالأسفل، بمعنى أن يجمع البرنامج أسعار جميع الأصناف في الداتا قريد ويظهر الإجمالي؟

يمكنك عمل حلقة بعدد الأسطر الموجودة في الشبكة و جمع قيم خلية عمود الاجمالي:

datagridview.Rows["Total"].Value

اقتباس
السؤال الرابع: الداتا قريد تستخدم لإدخال البيانات فكيف امنع البرنامج من أن يعرض البيانات الموجودة حاليا في الجدول عند فتح الفورم؟ أي أن يظهر لي الفورم فارغ عند فتحه؟

ببساطة لا تنفذ كود تحميل البيانات في الغريد !! أم أنك تقصد شيء آخر ؟

اقتباس
السؤال الخامس: بالنسبة لاستعراض الفاتورة كيف يمكنني أن اجعل البرنامج يظهر لي أصناف الفاتورة في الداتا قريد من خلال كتابة رقم الفاتورة بالأعلى، بمعنى أننا سابقا أضفنا عمود في الداتا قريد يكتب فيه رقم الفاتورة، وأنا أريد من البرنامج عندما اكتب رقم الفاتورة بالأعلى أن يظهر لي الصفوف التي تحتوي على هذا الرقم نفسه؟

يمكنك تطبيق عملية الفلترة على البيانات, و هذا يعتمد على طريق الربط بين برنامجك و بين قاعدة البيانات.

#3

أخي الكريم

وعليكم السلام ورحمة الله وبركاته

اعتذر منك فأنا مبتدئ ولدي عدة ملاحظات. بخصوص السؤال الأول فقد تمكنت من كتابة الكود بفضل مساعدتك.

أما السؤال الثاني فبصراحة أنا لم أفهم الكود وكذلك أيضا بالنسبة للسؤال الثالث فلم افهم مقصدك.

بالنسبة للرابع نعم كلامك صحيح وقد قمت بمنع ظهور البيانات الأن.

بخصوص السؤال الأخير أنا استخدم تقنية ADO للربط هل من الممكن المزيد من التوضيح أخي الكريم؟

اعتذر لاني اتعتبك معي.

شكرا جزيلا لك

#4

أخي: بالنسبة للسؤال الثاني: هذا هو الكود:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
                   int ItemID = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["ItemID"].Value);

            switch (ItemID)
            {
                case 1:
                    dataGridView1.Rows[e.RowIndex].Cells["Price"].Value = 1.5;
                    break;
                case 2:
                    dataGridView1.Rows[e.RowIndex].Cells["Price"].Value = 2.5;
                    break;
                case 3:
                    dataGridView1.Rows[e.RowIndex].Cells["Price"].Value = 3.5;
                    break;
            }
        }

أنت تقوم باستخدام الحدث CellValueChanged و الذي يتفعل عند تغير قيمة الخلية ( مثلاً رقم الصنف ) و ضمن هذا الحدث أنت تجلب قيمة ال رقم الصنف الذي أدخله المستخدم باستخدام:

int ItemID = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["ItemID"].Value); e.RowIndex يشير إلى السطر الذي منه تم الحدث

"ItemID" هو اسم عمود رقم الصنف.

تعليمة ال switch التالية تستخدم للمثال بحيث يتم تطبيق أسعار مختلفة لأرقام أصناف مختلفة, فمثلاً رقم الصنف 2 سيتم وضع سعر له 2.5 باستخدام:

dataGridView1.Rows[e.RowIndex].Cells["Price"].Value = 2.5;

طبعاً: ممكن أن يتم جلب سعر الصنف من قاعدة البيانات بناءاً على رقم رقم الصنف الذي تم الحصول عليه.

بالنسبة للسؤال الثالث: بعد كل عملية تعديل على الشبكة ( إدخال/تعديل/حذف ) يمكنك تنفيذ كود شبيه بالتالي:

Decimal sum = 0;

for(int i = 0 ; i < dataGridView1.Rows.Count; i++)
{
	sum += Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells["TotalAmount"].Value);
}

textBox1.Text = sum.ToString();

أنت تقوم بعمل حلقة على كل أسطر الشبكة و جمع قيمة حقل الاجمالي: TotalAmount و بعدها تضع القيمة في عنصر النص أسفل الشبكة.

بالنسبة للسؤال الخامس: عندما يدخل المستخدم رقم الفاتورة يجب تمرير رقم الفاتورة ضمن تعليمة where و إذا كنت تجلب البيانات في DataTable فيمكنك تطبيق الفلترة عليه مباشرة.

#5

حلووووووووووو بصراااحة

#6

السادة الزملاء

يا ريت كود الفاتورة بالكامل مع الطباعة

مواضيع مشابهة