منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

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

 كيف يتم اضافه عدد من الشهور على تاريخ موجود فى حقل سيكول سيرفر
كما واضح فى الصوره
ولكم منى جزيل الشكر
السلام عليكم ورحمة الله وبركاته
اخي الكريم 
هذا الكود للداتاغرايد افترضت فيه 3 اعمدة وحيث اننا نقف او نحتار الصف الحالي
نحول العمود الاول وهو التاريخ من نص  الى تاريخ ونضعه في متغير ونحول العمود الثاني الذي هو عدد اشهر الاضافة من نص الى نوع (int) ونضعه في متغير
ثم نسند للعمود الثالث  الناتج من قيمة المتغير الاول وهو التاريخ مضافا اليه عدد الاشهر الموجودة في المتغير الرقمي العمود الثاني
كود :
DateTime DD;
           DD = Convert.ToDateTime(dataGridView1.CurrentRow.Cells[0].Value);
         
           int VV;
           VV= int.Parse(dataGridView1.CurrentRow.Cells[1].Value.ToString());

           dataGridView1.CurrentRow.Cells[2].Value= DD.AddMonths(VV).ToString("dd/MM/yyyy");
(03-01-21, 07:18 PM)ابراهيم ايبو كتب : [ -> ]السلام عليكم ورحمة الله وبركاته
اخي الكريم 
هذا الكود للداتاغرايد افترضت فيه 3 اعمدة وحيث اننا نقف او نحتار الصف الحالي
نحول العمود الاول وهو التاريخ من نص  الى تاريخ ونضعه في متغير ونحول العمود الثاني الذي هو عدد اشهر الاضافة من نص الى نوع (int) ونضعه في متغير
ثم نسند للعمود الثالث  الناتج من قيمة المتغير الاول وهو التاريخ مضافا اليه عدد الاشهر الموجودة في المتغير الرقمي العمود الثاني
كود :
DateTime DD;
           DD = Convert.ToDateTime(dataGridView1.CurrentRow.Cells[0].Value);
         
           int VV;
           VV= int.Parse(dataGridView1.CurrentRow.Cells[1].Value.ToString());

           dataGridView1.CurrentRow.Cells[2].Value= DD.AddMonths(VV).ToString("dd/MM/yyyy");
شكرا لردك استاذي الفاضل

حولت افهم الكود واضعه ولكن خبرتى لا تكفى مع العلمان الاضفه تتم عن طريق دتا جرد فيو كما واضح فى الصوره
ارجو دمجه فى هذا الكود

كود :
void add_Penalty()
       {
           if (DGV_Penalty.CurrentRow != null)
           {
               DataGridViewRow dgvRow = DGV_Penalty.CurrentRow;
               SqlCommand Cmd = new SqlCommand();
               Cmd.CommandType = CommandType.Text;
               string Save = "";
               if (dgvRow.Cells[2].Value == DBNull.Value)//Insert
               {
                   Save = "INSERT INTO TB_Penalty(ID,Nam,Of_Month,Days,Number,Start,Fin,Totl,Mon_th,Dat,Emp_ID)VALUES (@ID,@Nam,@Of_Month,@Days,@Number,@Start,@Fin,@Totl,@Mon_th,@Dat,@Emp_ID)";
                   Cmd = new SqlCommand(Save, DB.Con);
                   Cmd.Parameters.AddWithValue("@ID", DB.GetMaxIDColumn("TB_Penalty", "ID").ToString());
               }
               else //update
               {
                   Save = "UPDATE TB_Penalty SET Nam = @Nam,Of_Month = @Of_Month,Days = @Days,Number = @Number,Start = @Start,Fin = @Fin,Totl = @Totl,Mon_th = @Mon_th,Dat = @Dat,Emp_ID = @Emp_ID WHERE ID = @ID";
                   Cmd = new SqlCommand(Save, DB.Con);
                   Cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(dgvRow.Cells[2].Value));
               }
               Cmd.Parameters.AddWithValue("@Nam", dgvRow.Cells[3].Value).DbType = DbType.Int32;
               Cmd.Parameters.AddWithValue("@Of_Month", dgvRow.Cells[4].Value).DbType = DbType.Int32;// دا حقل عدد لشهور المطلوب اضافتها على التاريخ
               Cmd.Parameters.AddWithValue("@Days", dgvRow.Cells[5].Value).DbType = DbType.Int32;
               Cmd.Parameters.AddWithValue("@Number", dgvRow.Cells[6].Value).DbType = DbType.Int32;
               Cmd.Parameters.AddWithValue("@Start", dgvRow.Cells[7].Value).DbType = DbType.Date;// هذا الحقل به تاريخ البدايه الذي يتم العمل عليه
               Cmd.Parameters.AddWithValue("@Fin", dgvRow.Cells[8].Value).DbType = DbType.Date;// هذا الحقل الذي يظهر به الناتج
               Cmd.Parameters.AddWithValue("@Totl", dgvRow.Cells[9].Value).DbType = DbType.Decimal;
               Cmd.Parameters.AddWithValue("@Mon_th", dgvRow.Cells[10].Value).DbType = DbType.Decimal;
               Cmd.Parameters.AddWithValue("@Dat", DateTime.Now.ToString("dd/MM/yyyy"));
               Cmd.Parameters.AddWithValue("@Emp_ID", Txt_Emp_ID.Text.ToString());
               DB.open(); Cmd.ExecuteNonQuery(); DB.close();
           }
       }
السلام عليكم ورحمة الله وبركاته
اخي الكريم اخر 
اولا يجب ان تتم عملية اضافة الشهور اثناء تعبئة مربعات النصوص الخاصة باضافة سجل جديد وعند اختيار تاريخ معين ثم اضافة عدد من الشهور في مربع نص عدد الشهور المضافة وبعد الانتقال الى التاريخ الجديد تتم العملية الحسابية
بعدها ستكون جملة الحفظ بحيث تأخذ بياناتها من مربعات الادخال 

معلومة ونصيحة : لاتجرى عمليات حسابية في جمل الانسرت او الابدايت
بل ان جملة الانسرت ستأخذ القيم جاهزة بعد العمليات الحسابية خارج كود الانسرت(الحفظ او التعديل)
هذا في حال انك تدخل البيانات عبر مربعات ادخال
عد الى برنامجك وغير القيم بحيث تستبدل حقول الداتاغرايد بمربعات الادخال
اما ان كان الادخال من الداتا غرايد فعليك استخدام اي حدث يناسبك عند الانتقال من خلية الى اخرى لعمل الحساب
والحذث التالي هو المناسب  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");
           }
       }
(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,
محتاج اقول للكود اذا كان حقل Nam يساوى خصم نفذ عمليه حسابيه واذا كان انذار نفذ عمليه حسابيه اخرى واذا كان جزاء نفذ عمليه مختلفه عن السابقين واذا كان عير ذلك ينفذ عمليه اخرى
والناتج يضعه فى حقل ويسميه (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