ايمن ميلاد نشر 27 ديسمبر 2024 أرسل تقرير نشر 27 ديسمبر 2024 السلام عليكم لدي جملة استعلام تالية تعرض بيانات بدون تكرار لماذا في كريستال ريبورت تعرض أكثر من مرة بتكرار SELECT dbo.BUYBILL.BUYCODE, dbo.BUYBILL.BUYTYPE, dbo.BUYBILL.BUYDATE, dbo.BUYBILL.IMPORTERNAME, dbo.BUYBILL.NOTES, dbo.BUYBILL.TOTAL, dbo.BUY_DET.ITEMCODE, dbo.BUY_DET.ITEMNAME, dbo.BUY_DET.PRICE, dbo.BUY_DET.QTY, dbo.BUY_DET.TOTAL AS Expr1 FROM dbo.BUYBILL INNER JOIN dbo.BUY_DET ON dbo.BUYBILL.BUYCODE = dbo.BUY_DET.BUYCODE; رغم انه فعلت خيار Suppress If Duplicated وقم بوضع علامة بجانبه. لزالت تظهر مشكلة يتكرر سطر ثلاثة مرات لكنه فارغ فقط ما الحل سبب انه datagridview تجلب منتجات اخر فاتورة void createdatatable() { dt.Columns.Add("رقم الصنف"); dt.Columns.Add("اسم الصنف"); dt.Columns.Add("سعر الشراء"); dt.Columns.Add("الكمية "); dt.Columns.Add(" الاجمالي"); dataGridView1.DataSource = dt; } try { 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.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.NewRow(); 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); dt.Rows.Add(dr); SqlCommandBuilder save = new SqlCommandBuilder(adp); adp.Update(dt); adp = new SqlDataAdapter("SELECT *FROM BUY_DET", Class1.con); adp.Fill(dt); for(int i=0;i<dataGridView1.Rows.Count;i++) { DataRow dr_ = dt.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; dt.Rows.Add(dr_); SqlCommandBuilder cmd_ = new SqlCommandBuilder(adp); adp.Update(dt); string itemCode = dataGridView1.Rows[i].Cells[0].Value.ToString(); int qty = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value); UpdateItemQuantity(itemCode, qty); } MessageBox.Show(" تم حفظ بيانات فاتورة بنجاح وتحديث كمية في المخزن ", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information); dataGridView1.DataSource = ""; button1_Click(null, null); } } catch(Exception ex) { MessageBox.Show(ex.Message); } كود حفظ وتعبئة داتا قريد فيو 1 اقتباس
0 ياسر مسكين نشر 27 ديسمبر 2024 أرسل تقرير نشر 27 ديسمبر 2024 بالنسبة لمشكلة عدم تجميع البيانات المترابطة يمكنك استخدام Group Expert والتجميع حسب BUYCODE ثم تفعيل "Suppress Blank Section" في Details وأيضا تفعيل "Keep Together" في خصائص المجموعة، كما أنك قد قمت باستخدام نفس DataTable للعمليات المتعددة وحساب TOTAL خاطئ فهو يأخذ الإجمالي الكلي بدل إجمالي السطر وأيضا تكرار Update داخل الحلقة لذا يمكن تعديله ليصبح: // تعريف DataTable جديد لكل عملية DataTable dtDetails = new DataTable(); SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM BUY_DET", Class1.con); adp.Fill(dtDetails); 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; // حساب إجمالي السطر dr_["TOTAL"] = Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value) * Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value); dtDetails.Rows.Add(dr_); } // تحديث مرة واحدة خارج الحلقة SqlCommandBuilder cmd_ = new SqlCommandBuilder(adp); adp.Update(dtDetails); 1 اقتباس
0 عبد الوهاب بومعراف نشر 28 ديسمبر 2024 أرسل تقرير نشر 28 ديسمبر 2024 لاحظ في في جملة الاستعلام الخاصة بك أنت تقوم بالربط بين جدول BUYBILL وجدول BUY_DET باستخدام العلاقة BUYCODE إذا كانت العلاقة بين الجداول تنتج سجلات مكررة مثلا إذا كان جدول BUY_DET يحتوي على أكثر من سجل مرتبط بنفس الفاتورة فإن التقرير سيعرض التكرار لذا تأكد من أن الجداول المرتبطة لا تحتوي على سجلات مكررة في قاعدة البيانات فإذا كنت تريد عرض بيانات "BUYBILL" فقط مع تجنب التكرار، يمكنك استخدام عبارة SQL مثل: SELECT DISTINCT dbo.BUYBILL.BUYCODE, dbo.BUYBILL.BUYTYPE, dbo.BUYBILL.BUYDATE, dbo.BUYBILL.IMPORTERNAME, dbo.BUYBILL.NOTES, dbo.BUYBILL.TOTAL FROM dbo.BUYBILL INNER JOIN dbo.BUY_DET ON dbo.BUYBILL.BUYCODE = dbo.BUY_DET.BUYCODE; وعندما يتم عرض بيانات مكررة في التقرير، عليك التأكد من إعداد خاصية Suppress If Duplicated لكل الحقول المكررة في التقرير من خلال التأكد من أن كل صف في DataGridView يحتوي على بيانات صحيحة قبل الإضافة إلى قاعدة البيانات، وذلك باستخدام شرط قبل الإضافة: if (dataGridView1.Rows[i].Cells[0].Value != null && dataGridView1.Rows[i].Cells[0].Value.ToString().Trim() != "") { // أضف البيانات } وقد يحدث أن يتم إدخال نفس السجل أكثر من مرة في قاعدة البيانات أثناء الحفظ لذا تأكد من أن جملة الحفظ لا تضيف بيانات مكررة يمكنك إجراء التحقق من البيانات الموجودة مسبقا في الجدول BUY_DET قبل الإضافة: DataTable dtCheck = new DataTable(); SqlDataAdapter adpCheck = new SqlDataAdapter($"SELECT * FROM BUY_DET WHERE BUYCODE='{BUYCODE.Text}' AND ITEMCODE='{dataGridView1.Rows[i].Cells[0].Value}'", Class1.con); adpCheck.Fill(dtCheck); if (dtCheck.Rows.Count == 0) { // أضف البيانات الجديدة } وتأكد من أنك تستخدم الحقول بشكل صحيح في التقرير إذا كنت تعرض تفاصيل الجدول BUY_DET، فقد يظهر كل سجل في الجدول بغض النظر عن التكرار لذا تأكد من أن الحقول الموجودة في قسم "Details" تتناسب مع المتطلبات وإذا كان التكرار لا يزال موجودا، قم بإضافة شرط للتجميع (Grouping) بناء على حقل BUYCODE. 1 اقتباس
0 ايمن ميلاد نشر 28 ديسمبر 2024 الكاتب أرسل تقرير نشر 28 ديسمبر 2024 هادي جملة استعلام تعرض بدون تكرار داخل sql server SELECT DISTINCT dbo.BUYBILL.BUYCODE, dbo.BUYBILL.BUYTYPE, dbo.BUYBILL.BUYDATE, dbo.BUYBILL.IMPORTERNAME, dbo.BUYBILL.NOTES,dbo.BUY_DET.ITEMNAME,dbo.BUY_DET.PRICE ,dbo.BUY_DET.QTY,dbo.BUY_DET.TOTAL, dbo.BUYBILL.TOTAL FROM dbo.BUYBILL INNER JOIN dbo.BUY_DET ON dbo.BUYBILL.BUYCODE = dbo.BUY_DET.BUYCODE; مشكلة تكمن عند حفظ فاتورة وانشاء فاتورة جديدة يجلب بيانات تبع فاتورة سابقة معا جديدة في تقرير بمعني اشتريت بظاعة وبضاعة الي قبلي انا اريد اخر فاتورة وعرضها باصنافها فقط هادي جملة استعلام التي استعمله لماذا يعرض اصناف فاتورة سابقة معاه اصناف فاتورة حالية واصناف فاتورة حالية وسابقة SELECT dbo.BUYBILL.BUYCODE, dbo.BUYBILL.BUYTYPE, dbo.BUYBILL.BUYDATE, dbo.BUYBILL.IMPORTERNAME, dbo.BUYBILL.NOTES, dbo.BUY_DET.ITEMNAME, dbo.BUY_DET.PRICE, dbo.BUY_DET.QTY, dbo.BUY_DET.TOTAL, dbo.BUYBILL.TOTAL FROM dbo.BUYBILL INNER JOIN dbo.BUY_DET ON dbo.BUYBILL.BUYCODE = dbo.BUY_DET.BUYCODE WHERE dbo.BUYBILL.BUYCODE = (SELECT MAX(BUYCODE) FROM dbo.BUYBILL); اقتباس
0 ايمن ميلاد نشر 28 ديسمبر 2024 الكاتب أرسل تقرير نشر 28 ديسمبر 2024 تم حل مشكلة عن طريق عمل command داخل كريستال ريبورت اقتباس
السؤال
ايمن ميلاد
السلام عليكم لدي جملة استعلام تالية تعرض بيانات بدون تكرار لماذا في كريستال ريبورت تعرض أكثر من مرة بتكرار
رغم انه فعلت
خيار Suppress If Duplicated وقم بوضع علامة بجانبه. لزالت تظهر مشكلة يتكرر سطر ثلاثة مرات لكنه فارغ فقط ما الحل
سبب انه datagridview تجلب منتجات اخر فاتورة
كود حفظ وتعبئة داتا قريد فيو
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.