اذهب إلى المحتوى

السؤال

نشر

السلام عليكم لدي كود تالي لتعديل بيانات في جدول فاتورة وتفاصيل فاتورة 

يتم تعديل بيانات في جدول فاتورة لكن تفاصيل فاتورة تظل اصناف كم هيا 

try
{
    // تعريف المتغير للحصول على اسم المحل من عنصر التحكم
    string importerName = IMPORTERNAME.Text;

    // جملة الاستعلام باستخدام معلمة بدلاً من القيمة الثابتة
    string query = "SELECT IMPORTERNAME, SUM(DebtAmount) AS TotalDebt " +
                   "FROM BUYBILL " +
                   "WHERE IMPORTERNAME = @importerName AND DebtAmount > 0 " +
                   "GROUP BY IMPORTERNAME";

    // إنشاء SqlDataAdapter مع جملة الاستعلام والاتصال بقاعدة البيانات
    SqlDataAdapter a = new SqlDataAdapter(query, Class1.con);

    // إضافة المعلمة إلى SqlDataAdapter
    a.SelectCommand.Parameters.AddWithValue("@importerName", importerName);

    // إنشاء DataTable لملء البيانات المسترجعة
    DataTable d = new DataTable();

    // ملء DataTable باستخدام SqlDataAdapter
    a.Fill(d);

    // عرض معلومات الدين
    if (d.Rows.Count > 0)
    {
        string tt = d.Rows[0]["TotalDebt"].ToString();
        MessageBox.Show("دين المحل: " + tt);
    }

    // التحقق من اختيارات المستخدم
    if (IMPORTERNAME.SelectedIndex < 0)
    {
        MessageBox.Show("يرجى اختيار اسم الزبون", "تنبيه");
        IMPORTERNAME.Select();
        return;
    }
    if (BUYTYPE.SelectedIndex < 0)
    {
        MessageBox.Show("يرجى اختيار نوع الفاتورة", "تنبيه");
        BUYTYPE.Select();
        return;
    }
    if (dataGridView1.Rows.Count == 0)
    {
        MessageBox.Show("لا توجد أصناف لحفظها", "تنبيه");
        return;
    }

    // التحقق من وجود الفاتورة
    DataTable dt = new DataTable();
    SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM buybill WHERE buycode=@buycode", Class1.con);
    adp.SelectCommand.Parameters.AddWithValue("@buycode", BUYCODE.Text);
    adp.Fill(dt);

    if (dt.Rows.Count > 0)
    {
        // تحديث بيانات الفاتورة
        DataRow existingRow = dt.Rows[0];
        existingRow["BUYTYPE"] = BUYTYPE.Text;
        existingRow["IMPORTERNAME"] = IMPORTERNAME.Text;
        existingRow["NOTES"] = NOTES.Text;
        existingRow["BUYDATE"] = BUYDATE.Value;
        existingRow["TOTAL"] = Convert.ToDecimal(total_.Text);
        existingRow["TOTAL_ARBIC"] = totalar.Text;
        existingRow["TOTALQTY"] = Convert.ToInt32(totalqty.Text);
        existingRow["DebtAmount"] = Convert.ToDecimal(total_.Text);

        SqlCommandBuilder save = new SqlCommandBuilder(adp);
        adp.Update(dt);

        // تحديث تفاصيل الفاتورة
        DataTable dtDetails = new DataTable();
        SqlDataAdapter detailAdp = new SqlDataAdapter("SELECT * FROM BUY_DET WHERE BUYCODE=@buycode", Class1.con);
        detailAdp.SelectCommand.Parameters.AddWithValue("@buycode", BUYCODE.Text);
        detailAdp.Fill(dtDetails);

        // تحديث أو إضافة تفاصيل جديدة
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            string itemCode = row.Cells[0].Value.ToString();
            int qty = Convert.ToInt32(row.Cells[3].Value);

            // تحقق مما إذا كان العنصر موجود بالفعل في تفاصيل الفاتورة
            DataRow existingDetail = dtDetails.AsEnumerable()
                .FirstOrDefault(r => r.Field<string>("ITEMCODE") == itemCode);

            if (existingDetail != null)
            {
                // تحديث الكمية والسعر
                existingDetail["QTY"] = qty;
                existingDetail["PRICE"] = row.Cells[2].Value;
                existingDetail["TOTAL"] = Convert.ToDecimal(row.Cells[2].Value) * qty;
            }
            else
            {
                // إضافة تفاصيل جديدة
                DataRow newDetailRow = dtDetails.NewRow();
                newDetailRow["BUYCODE"] = BUYCODE.Text;
                newDetailRow["ITEMCODE"] = itemCode;
                newDetailRow["ITEMNAME"] = row.Cells[1].Value;
                newDetailRow["PRICE"] = row.Cells[2].Value;
                newDetailRow["QTY"] = qty;
                newDetailRow["TOTAL"] = Convert.ToDecimal(row.Cells[2].Value) * qty;
                dtDetails.Rows.Add(newDetailRow);
            }

            UpdateItemQuantity(itemCode, qty);
        }

        SqlCommandBuilder detailCmd = new SqlCommandBuilder(detailAdp);
        detailAdp.Update(dtDetails);

        MessageBox.Show("تم تعديل بيانات الفاتورة بنجاح وتحديث كمية في المخزن", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information);
        button1_Click(null, null);
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

 

Recommended Posts

  • 0
نشر

مشكلة تكمن عند تعديل فاتورة بحيث اضيف صنف جديد يظهر اعمدة جديده في داتا قريد فيو معا اعمدة التي به اصناف سابقة 

 if (e.KeyCode == Keys.Enter)
            {
                // التحقق من وجود الصنف مسبقًا
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    if (itemcode.Text == dataGridView1.Rows[i].Cells[0].Value.ToString())
                    {
                        MessageBox.Show("اسم الصنف موجود مسبقا", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }
                }
                CalculateTotal();
                // التحقق مما إذا كانت الأعمدة موجودة بالفعل قبل إضافتها
                // التأكد من أن الجدول يحتوي على الأعمدة المطلوبة
                if (!dt.Columns.Contains("رقم الصنف"))
                {
                    dt.Columns.Add("رقم الصنف");
                }
                if (!dt.Columns.Contains("اسم الصنف"))
                {
                    dt.Columns.Add("اسم الصنف");
                }
                if (!dt.Columns.Contains("السعر"))
                {
                    dt.Columns.Add("السعر");
                }
                if (!dt.Columns.Contains("الكمية"))
                {
                    dt.Columns.Add("الكمية");
                }
                if (!dt.Columns.Contains("الاجمالي"))
                {
                    dt.Columns.Add("الاجمالي");
                }




                // إنشاء صف جديد وإضافة البيانات
                DataRow r = dt.NewRow();
                r["رقم الصنف"] = itemcode.Text;
                r["اسم الصنف"] = itemname.Text;
                r["السعر"] = price.Text;
                r["الكمية"] = qty.Text;
                r["الاجمالي"] = total_.Text;
                dt.Rows.Add(r);

                dataGridView1.DataSource = dt;

 

  • 0
نشر

لماذا اثناء تحديث فاتورة يضيف اعمدة جديدة في داتا قريد فيو كما موضح في صورة ولا يضفيه اسفل عناصر مرفق كود 

 if (e.KeyCode == Keys.Enter)
            {
                // التحقق من وجود الصنف مسبقًا
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    if (dataGridView1.Rows[i].Cells[0].Value.ToString()==itemcode.Text  )
                    {
                        MessageBox.Show("اسم الصنف موجود مسبقا", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }
                }
                
                CalculateTotal();
                // التحقق مما إذا كانت الأعمدة موجودة بالفعل قبل إضافتها
                // التأكد من أن الجدول يحتوي على الأعمدة المطلوبة
                if (!dt.Columns.Contains("رقم الصنف"))
                {
                    dt.Columns.Add("رقم الصنف");
                }
                if (!dt.Columns.Contains("اسم الصنف"))
                {
                    dt.Columns.Add("اسم الصنف");
                }
                if (!dt.Columns.Contains("السعر"))
                {
                    dt.Columns.Add("السعر");
                }
                if (!dt.Columns.Contains("الكمية"))
                {
                    dt.Columns.Add("الكمية");
                }
                if (!dt.Columns.Contains("الاجمالي"))
                {
                    dt.Columns.Add("الاجمالي");
                }




                // إنشاء صف جديد وإضافة البيانات
                DataRow r = dt.NewRow();
                r["رقم الصنف"] = itemcode.Text;
                r["اسم الصنف"] = itemname.Text;
                r["السعر"] = price.Text;
                r["الكمية"] = qty.Text;
                r["الاجمالي"] = total_.Text;
                dt.Rows.Add(r);

                dataGridView1.DataSource = dt;


            }

 

لقطة شاشة 2025-01-05 170614.png

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...