07-01-21, 01:46 PM
(04-01-21, 04:14 AM)ابراهيم ايبو كتب : السلام عليكم ورحمة الله وبركاتهاولا بشكر حضرتك على مجهودك ومحاوله مساعدتى
اخي الكريم اخر
اولا يجب ان تتم عملية اضافة الشهور اثناء تعبئة مربعات النصوص الخاصة باضافة سجل جديد وعند اختيار تاريخ معين ثم اضافة عدد من الشهور في مربع نص عدد الشهور المضافة وبعد الانتقال الى التاريخ الجديد تتم العملية الحسابية
بعدها ستكون جملة الحفظ بحيث تأخذ بياناتها من مربعات الادخال
معلومة ونصيحة : لاتجرى عمليات حسابية في جمل الانسرت او الابدايت
بل ان جملة الانسرت ستأخذ القيم جاهزة بعد العمليات الحسابية خارج كود الانسرت(الحفظ او التعديل)
هذا في حال انك تدخل البيانات عبر مربعات ادخال
عد الى برنامجك وغير القيم بحيث تستبدل حقول الداتاغرايد بمربعات الادخال
اما ان كان الادخال من الداتا غرايد فعليك استخدام اي حدث يناسبك عند الانتقال من خلية الى اخرى لعمل الحساب
والحذث التالي هو المناسب dataGridView1_CellValidated اي ان العملية الحسابية تتم في الداتاتا غرايد ثم ستقوم بجملة الحفظ المعتادة لديك بشكل مستقل
اليك الكود
كود :
private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
{
DateTime DD;
int VV;
DD = Convert.ToDateTime(dataGridView1.CurrentRow.Cells[0].Value);
if (dataGridView1.CurrentRow.Cells[1].Value != null)
{
VV = int.Parse(dataGridView1.CurrentRow.Cells[1].Value.ToString());
dataGridView1.CurrentRow.Cells[2].Value = DD.AddMonths(VV).ToString("dd/MM/yyyy");
}
}
انا بالفعل الاضافه بتم عن طريق (dataGridView) وليس مربعات نصوص
حولت اعمل الكود ولكن يظهر خطأ فى هذا السطر تحديدا بيضع خط احمر اسفل (VV)
("dataGridView1.CurrentRow.Cells[2].Value = DD.AddMonths(VV).ToString("dd/MM/yyyy");
ولذلك اقتصرت الطريق وقمت بعمل فيو داخل السيكول سيرفر ونفذ المطلوب كما اريد ولكن وجهتنى مشكله اتمنى القي حل ليها
مستخدم فيه داله (iif) واريد اضافتها اكتر من مره ولم افلح مرفق ككود الفيو داخل السيكول سيرفر
كود :
iif((dbo.TB_Penalt.Nam = 'خصم'), CONVERT(decimal(18, 2), SUM(dbo.View_Total_Statement.Total / dbo.TB_Penalty.Number_Day_Month * dbo.TB_Penalty.Number_Days)),
iif((dbo.TB_Penalt.Nam = 'انذار'), CONVERT(decimal(18, 2), SUM(dbo.View_Total_Statement.Total * 85/ 100)),CONVERT(decimal(18, 2), iif((dbo.TB_Penalt.Nam = 'جزاء'), dbo.View_C_Bdalat.Total)) AS Total_Discount,والناتج يضعه فى حقل ويسميه (Total_Discount)
ولكن بتظهر خطأ
مع ان الكود بيعمل بشرط واحد فقط لكن عند اضافه اكتر من شرط بيظهر خطأ
لو امكن تعدل الكود كما اريد وجزاك الله خيرا
الكود كامل هو
كود :
SELECT dbo.TB_Employ.Emp_ID, dbo.TB_Employ.Emp_Nam, dbo.TB_Penalty.ID AS Nam_ID, dbo.TB_Penalty.Number_Days, dbo.TB_Penalty.Number_Month, dbo.TB_Penalty.Start,
DATEADD(Month, dbo.TB_Penalty.Number_Month, dbo.TB_Penalty.Start) AS Fin, dbo.View_Total_Statement.Total AS Totl,
iif((dbo.TB_Penalt.Nam = 'خصم'), CONVERT(decimal(18, 2), SUM(dbo.View_Total_Statement.Total / dbo.TB_Penalty.Number_Day_Month * dbo.TB_Penalty.Number_Days)),
iif((dbo.TB_Penalt.Nam = 'انذار'), CONVERT(decimal(18, 2), SUM(dbo.View_Total_Statement.Total * 85/ 100)),
iif((dbo.TB_Penalt.Nam = 'جزاء'), CONVERT(decimal(18, 2), dbo.View_C_Bdalat.Total),CONVERT(decimal(18, 2), dbo.View_Total_Statement.Total)) AS Total_Discount,
dbo.TB_Penalty.Number_Day_Month,
dbo.TB_Penalt.Nam
FROM dbo.View_C_Bdalat RIGHT OUTER JOIN
dbo.TB_Penalt INNER JOIN
dbo.TB_Penalty ON dbo.TB_Penalt.ID = dbo.TB_Penalty.Nam ON dbo.View_C_Bdalat.Bblat_Nam = dbo.TB_Penalt.Nam AND
dbo.View_C_Bdalat.Emp_ID = dbo.TB_Penalty.Emp_ID LEFT OUTER JOIN
dbo.TB_Salarie INNER JOIN
dbo.TB_Employ INNER JOIN
dbo.View_Total_Statement ON dbo.TB_Employ.Emp_ID = dbo.View_Total_Statement.Emp_ID ON dbo.TB_Salarie.Emp_ID = dbo.TB_Employ.Emp_ID ON
dbo.TB_Penalty.Emp_ID = dbo.TB_Employ.Emp_ID
GROUP BY dbo.TB_Employ.Emp_ID, dbo.TB_Employ.Emp_Nam, dbo.TB_Penalty.ID, dbo.TB_Penalty.Start, dbo.TB_Penalty.Number_Days, dbo.TB_Penalty.Number_Month,
dbo.TB_Penalty.Number_Day_Month, dbo.TB_Penalt.Nam, dbo.View_C_Bdalat.Total, dbo.View_Total_Statement.Total