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

السؤال

نشر

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

public void show_details(string id)
        {
            try
            {
                // إنشاء DataTable وملء البيانات باستخدام SqlDataAdapter
                string sql = "SELECT * FROM BUYBILL WHERE BUYCODE = '" + (id)+ "'";
                DataTable dt = new DataTable();

                SqlDataAdapter adp = new SqlDataAdapter(sql, Class1.con);
                
                    adp.Fill(dt);
                

                if (dt.Rows.Count == 0)
                {
                    MessageBox.Show("يرجى التأكد من رقم الفاتورة", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else
                {
                    DataRow row = dt.Rows[0];
                    BUYCODE.Text = row["BUYCODE"].ToString();
                    BUYTYPE.Text = row["BUYTYPE"].ToString();
                    IMPORTERNAME.Text = row["IMPORTERNAME"].ToString();
                    if (row["BUYDATE"] != DBNull.Value)
                        BUYDATE.Value = DateTime.Parse(row["BUYDATE"].ToString()).Date;
                    NOTES.Text = row["NOTES"].ToString();
                    total_.Text = row["TOTAL"].ToString();
                    totalqty.Text = row["TOTALQTY"].ToString();

                    DataTable dt_ = new DataTable();
                    string sql_ = "SELECT * FROM BUY_DET WHERE BUYCODE = N'" + (id) + "'";

                    SqlDataAdapter adp_ = new SqlDataAdapter(sql_, Class1.con);
                  
                        adp_.Fill(dt_);
                    

                    // إضافة أعمدة إلى DataGridView إذا لم تكن موجودة بالفعل
                    if (dataGridView1.Columns.Count == 0)
                    {
                        dataGridView1.Columns.Add("ITEMCODE", "كود الصنف");
                        dataGridView1.Columns.Add("ITEMNAME", "اسم الصنف");
                        dataGridView1.Columns.Add("PRICE", "السعر");
                        dataGridView1.Columns.Add("QTY", "الكمية");
                        dataGridView1.Columns.Add("TOTAL", "الإجمالي");
                    }

                    dataGridView1.Rows.Clear();

                    foreach (DataRow detailRow in dt_.Rows)
                    {
                        dataGridView1.Rows.Add(detailRow["ITEMCODE"], detailRow["ITEMNAME"], detailRow["PRICE"], detailRow["QTY"], detailRow["TOTAL"]);
                    }

                    btn_edit.Enabled = true;
                    btn_save.Enabled = false;
                   
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("حدث خطأ: " + ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

كود استدعاء دالة 

 BUYBILL frm = new BUYBILL();
        frm.show_details(dataGridView1.CurrentRow.Cells[1].Value.ToString());
        this.Close();

 

Recommended Posts

  • 0
نشر

المشكلة أنك تقوم بإنشاء النموذج وتمرير البيانات له ولكن لا تقوم بعرضه قبل إغلاق النموذج الحالي لذا يجب استدعاء Show() أو ShowDialog() لعرض النموذج الجديد:

this.Close();

وهذا خطأ لأنه يغلق النافذة قبل عرض البيانات والحل هو إضافة Show() قبل إغلاق النموذج الحالي:

BUYBILL frm = new BUYBILL();
frm.show_details(dataGridView1.CurrentRow.Cells[1].Value.ToString());
frm.Show();
this.Close();

أو:

BUYBILL frm = new BUYBILL();
frm.show_details(dataGridView1.CurrentRow.Cells[1].Value.ToString());
frm.ShowDialog();
this.Close();
  • 0
نشر (معدل)

ظهرت البيانات الان  

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

try
            { // تعريف المتغير للحصول على اسم المحل من عنصر التحكم
                DialogResult result = MessageBox.Show("هل أنت متأكد من أنك تريد تعديل البيانات؟", "تأكيد التعديل", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if ((result == DialogResult.Yes))
                {
                  



                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.Text + "'", Class1.con);
                adp.Fill(dt);
                    if (dt.Rows.Count == 0)
                    {
                        int code = Class1.CODE_GENE("BUYBILL", "ID") + 1;
                        BUYCODE.Text = code.ToString();

                    }
                    else
                    {
                        DataRow dr = dt.Rows[0];
                        dr["BUYCODE"] = BUYCODE.Text;
                        dr["BUYTYPE"] = BUYTYPE.Text;
                        dr["IMPORTERNAME"] = IMPORTERNAME.Text;
                        dr["NOTES"] = NOTES.Text;
                        dr["BUYDATE"] = BUYDATE.Value;
                        dr["TOTAL"] = Convert.ToDecimal(total_.Text);
                        dr["TOTAL_ARBIC"] = totalar.Text;
                        dr["TOTALQTY"] = Convert.ToInt32(totalqty.Text);
                        dr["DebtAmount"] = Convert.ToDecimal(total_.Text);

                        dt.Rows.Add(dr);
                        SqlCommandBuilder save = new SqlCommandBuilder(adp);
                        adp.Update(dt);

                        SqlCommand cmd_del = new SqlCommand();
                        cmd_del.Connection = Class1.con;
                        cmd_del.CommandText = "DELETE FROM BUY_DET WHERE BUYCODE ='" + BUYCODE.Text + "'";
                        cmd_del.ExecuteNonQuery();

                        DataTable dtDetails = new DataTable();

                        adp = new SqlDataAdapter("SELECT *FROM BUY_DET", Class1.con);
                        adp.Fill(dtDetails);
                        if (dataGridView1.Columns.Count == 0)
            {
                dataGridView1.Columns.Add("ITEMCODE", "كود الصنف");
                dataGridView1.Columns.Add("ITEMNAME", "اسم الصنف");
                dataGridView1.Columns.Add("PRICE", "السعر");
                dataGridView1.Columns.Add("QTY", "الكمية");
                dataGridView1.Columns.Add("TOTAL", "الإجمالي");
            }

            dataGridView1.Rows.Clear();
                        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                        {
                            DataRow dr_ = dtDetails.NewRow();
                            dr_["BUYCODE"] = BUYCODE.Text;
                            dr_["ITEMCODE"] = dataGridView1.Rows[i].Cells[0].Value;
                            dr_["ITEMNAME"] = dataGridView1.Rows[i].Cells[1].Value;
                            dr_["PRICE"] = dataGridView1.Rows[i].Cells[2].Value;
                            //dr_["TOTAL"] = total_.Text;
                            dr_["QTY"] = dataGridView1.Rows[i].Cells[3].Value;
                            dtDetails.Rows.Add(dr_);
                            dr_["TOTAL"] = Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value) * Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value);
                            string itemCode = dataGridView1.Rows[i].Cells[0].Value.ToString();
                            int qty = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);
                            UpdateItemQuantity(itemCode, qty);
                        }
                        SqlCommandBuilder cmd_ = new SqlCommandBuilder(adp);
                        adp.Update(dtDetails);
                        MessageBox.Show(" تم حفظ تعديل بيانات  فاتورة بنجاح وتحديث كمية في المخزن ", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        button1_Click(null, null);
                    }







                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

 

تم التعديل في بواسطة ايمن ميلاد
  • 0
نشر
بتاريخ On 1‏/1‏/2025 at 17:01 قال ايمن ميلاد:

ظهرت البيانات الان  

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

try
            { // تعريف المتغير للحصول على اسم المحل من عنصر التحكم
                DialogResult result = MessageBox.Show("هل أنت متأكد من أنك تريد تعديل البيانات؟", "تأكيد التعديل", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if ((result == DialogResult.Yes))
                {
                  



                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.Text + "'", Class1.con);
                adp.Fill(dt);
                    if (dt.Rows.Count == 0)
                    {
                        int code = Class1.CODE_GENE("BUYBILL", "ID") + 1;
                        BUYCODE.Text = code.ToString();

                    }
                    else
                    {
                        DataRow dr = dt.Rows[0];
                        dr["BUYCODE"] = BUYCODE.Text;
                        dr["BUYTYPE"] = BUYTYPE.Text;
                        dr["IMPORTERNAME"] = IMPORTERNAME.Text;
                        dr["NOTES"] = NOTES.Text;
                        dr["BUYDATE"] = BUYDATE.Value;
                        dr["TOTAL"] = Convert.ToDecimal(total_.Text);
                        dr["TOTAL_ARBIC"] = totalar.Text;
                        dr["TOTALQTY"] = Convert.ToInt32(totalqty.Text);
                        dr["DebtAmount"] = Convert.ToDecimal(total_.Text);

                        dt.Rows.Add(dr);
                        SqlCommandBuilder save = new SqlCommandBuilder(adp);
                        adp.Update(dt);

                        SqlCommand cmd_del = new SqlCommand();
                        cmd_del.Connection = Class1.con;
                        cmd_del.CommandText = "DELETE FROM BUY_DET WHERE BUYCODE ='" + BUYCODE.Text + "'";
                        cmd_del.ExecuteNonQuery();

                        DataTable dtDetails = new DataTable();

                        adp = new SqlDataAdapter("SELECT *FROM BUY_DET", Class1.con);
                        adp.Fill(dtDetails);
                        if (dataGridView1.Columns.Count == 0)
            {
                dataGridView1.Columns.Add("ITEMCODE", "كود الصنف");
                dataGridView1.Columns.Add("ITEMNAME", "اسم الصنف");
                dataGridView1.Columns.Add("PRICE", "السعر");
                dataGridView1.Columns.Add("QTY", "الكمية");
                dataGridView1.Columns.Add("TOTAL", "الإجمالي");
            }

            dataGridView1.Rows.Clear();
                        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                        {
                            DataRow dr_ = dtDetails.NewRow();
                            dr_["BUYCODE"] = BUYCODE.Text;
                            dr_["ITEMCODE"] = dataGridView1.Rows[i].Cells[0].Value;
                            dr_["ITEMNAME"] = dataGridView1.Rows[i].Cells[1].Value;
                            dr_["PRICE"] = dataGridView1.Rows[i].Cells[2].Value;
                            //dr_["TOTAL"] = total_.Text;
                            dr_["QTY"] = dataGridView1.Rows[i].Cells[3].Value;
                            dtDetails.Rows.Add(dr_);
                            dr_["TOTAL"] = Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value) * Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value);
                            string itemCode = dataGridView1.Rows[i].Cells[0].Value.ToString();
                            int qty = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);
                            UpdateItemQuantity(itemCode, qty);
                        }
                        SqlCommandBuilder cmd_ = new SqlCommandBuilder(adp);
                        adp.Update(dtDetails);
                        MessageBox.Show(" تم حفظ تعديل بيانات  فاتورة بنجاح وتحديث كمية في المخزن ", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        button1_Click(null, null);
                    }







                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

 

بسبب طريقة تعاملك مع الـ DataGridView عند إضافة الأصناف وتحديثها، فحاليًا تقوم بإضافة أعمدة جديدة في كل مرة يتم فيها تعديل الفاتورة، وذلك هو سبب ظهور الأعمدة المكررة.

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

private void Form1_Load(object sender, EventArgs e)
{
    if (dataGridView1.Columns.Count == 0)
    {
        dataGridView1.Columns.Add("ITEMCODE", "كود الصنف");
        dataGridView1.Columns.Add("ITEMNAME", "اسم الصنف");
        dataGridView1.Columns.Add("PRICE", "السعر");
        dataGridView1.Columns.Add("QTY", "الكمية");
        dataGridView1.Columns.Add("TOTAL", "الإجمالي");
    }
}

واكتب بدلاً من Form1 في Form1_Load اسم النموذج لديك، بعد ذلك قم فقط بمسح الصفوف باستخدام dataGridView1.Rows.Clear(); عند الحاجة.

try
{
    DialogResult result = MessageBox.Show("هل أنت متأكد من أنك تريد تعديل البيانات؟", "تأكيد التعديل", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if ((result == DialogResult.Yes))
    {
        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.Text + "'", Class1.con);
        adp.Fill(dt);
        if (dt.Rows.Count == 0)
        {
            int code = Class1.CODE_GENE("BUYBILL", "ID") + 1;
            BUYCODE.Text = code.ToString();
        }
        else
        {
            DataRow dr = dt.Rows[0];
            dr["BUYCODE"] = BUYCODE.Text;
            dr["BUYTYPE"] = BUYTYPE.Text;
            dr["IMPORTERNAME"] = IMPORTERNAME.Text;
            dr["NOTES"] = NOTES.Text;
            dr["BUYDATE"] = BUYDATE.Value;
            dr["TOTAL"] = Convert.ToDecimal(total_.Text);
            dr["TOTAL_ARBIC"] = totalar.Text;
            dr["TOTALQTY"] = Convert.ToInt32(totalqty.Text);
            dr["DebtAmount"] = Convert.ToDecimal(total_.Text);

            dt.Rows.Add(dr);
            SqlCommandBuilder save = new SqlCommandBuilder(adp);
            adp.Update(dt);

            SqlCommand cmd_del = new SqlCommand();
            cmd_del.Connection = Class1.con;
            cmd_del.CommandText = "DELETE FROM BUY_DET WHERE BUYCODE ='" + BUYCODE.Text + "'";
            cmd_del.ExecuteNonQuery();

            DataTable dtDetails = new DataTable();
            adp = new SqlDataAdapter("SELECT *FROM BUY_DET", Class1.con);
            adp.Fill(dtDetails);

            dataGridView1.Rows.Clear();
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                DataRow dr_ = dtDetails.NewRow();
                dr_["BUYCODE"] = BUYCODE.Text;
                dr_["ITEMCODE"] = dataGridView1.Rows[i].Cells[0].Value;
                dr_["ITEMNAME"] = dataGridView1.Rows[i].Cells[1].Value;
                dr_["PRICE"] = dataGridView1.Rows[i].Cells[2].Value;
                dr_["QTY"] = dataGridView1.Rows[i].Cells[3].Value;
                dtDetails.Rows.Add(dr_);
                dr_["TOTAL"] = Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value) * Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value);
                string itemCode = dataGridView1.Rows[i].Cells[0].Value.ToString();
                int qty = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);
                UpdateItemQuantity(itemCode, qty);
            }
            SqlCommandBuilder cmd_ = new SqlCommandBuilder(adp);
            adp.Update(dtDetails);
            MessageBox.Show(" تم حفظ تعديل بيانات  فاتورة بنجاح وتحديث كمية في المخزن ", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information);
            button1_Click(null, null);
        }
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...