سوال در مورد گریدویو و نمایش رکوردها

ناآشنا

عضو جدید
کاربر ممتاز
سلام دوستان من یه کد نوشتم که نمی تونم اشکالشو پیدا کنم گه گاه درست عمل میکنه اما همیشه نه؟
واسه خودم عجیبه کد هیچ خطایی نداره اما در اجرا مشکل داره یعنی کاری که باید انجام بده رو نمیده.
این فرممه دو تا گریدویو دارم.
گریدویو.jpg
اینم کدمه که در مورد کد باید بگم .datamanage.dt کلاس اتصال به دیتابیسم هست.datamanage.I_U_D منظور اعمال درج و حذف و آپدیت در دیتابیسم هست.
کاری که انجام میده من یه رکورد رو در یکی از دیتاگریدها انتخاب میکنم وقتی زدم ثبت خروج باید در دیتاگرید نمایشش نده اما گاهی اوقات هیچ اتفاقی در دیتابیس صورت نمی گیره اگه کدم رو بررسی کنید اگه اشکالی که من نمی بینم ببینید و به من بگید یا راه حل دیگه واسش بدید ممنون میشم.
کد:
if (dataGridView1.SelectedRows.Count > 0)
                {
                    for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
                    {
                        string idcar = dataGridView1.SelectedRows[i].Cells[0].Value.ToString();
                        DataManagement.DT = DataManagement.I_U_D("select * from [carinout] where carinout.idcar=" + idcar + "", "Update carinout set dateout='" + DateTime.Now + "',userwrite=N'" + loginfrm.userwrites + "',watch='"+false +"' where carinout.idcar=" + idcar);
                       
                        
                        MessageBox.Show(".خروج ثبت شد","",MessageBoxButtons .OK ,MessageBoxIcon.Information );
                      
 
 
                    }
  showdata(); 
 
                }
                else if (dataGridView2 .SelectedRows .Count >0)
                {
                    for (int j = 0; j < dataGridView2.SelectedRows.Count; j++)
                    {
                        string idcarh = dataGridView2.SelectedRows[j].Cells[0].Value.ToString();
                        DataManagement.DT = DataManagement.I_U_D("SELECT * FROM  [halfcar] WHERE idcar='"+idcarh +"'","UPDATE [halfcar] SET dateouthalf='"+DateTime .Now +"',userwrite=N'"+loginfrm .userwrites +"',watch='"+false +"' WHERE halfcar.idcar='"+idcarh +"'");
                        MessageBox.Show(".خروج ثبت شد", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                       
                    }
 showdata();
                }
                else
                    MessageBox.Show(".وسیله ای را انتخاب نکردید","پیغام سیستم",MessageBoxButtons .OK ,MessageBoxIcon.Exclamation );
            }
            catch
            {
            }

راستی showdata(); اطلاعات بانک رو روی گریدویو نمایش میده .
دوستان اگه برای پاسخ گویی به مشکلم توضیحات بیشتری لازم دارید بگید تا بگم.
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
سلام دوستان من یه کد نوشتم که نمی تونم اشکالشو پیدا کنم گه گاه درست عمل میکنه اما همیشه نه؟
واسه خودم عجیبه کد هیچ خطایی نداره اما در اجرا مشکل داره یعنی کاری که باید انجام بده رو نمیده.
این فرممه دو تا گریدویو دارم.
مشاهده پیوست 103258
اینم کدمه که در مورد کد باید بگم .datamanage.dt کلاس اتصال به دیتابیسم هست.datamanage.I_U_D منظور اعمال درج و حذف و آپدیت در دیتابیسم هست.
کاری که انجام میده من یه رکورد رو در یکی از دیتاگریدها انتخاب میکنم وقتی زدم ثبت خروج باید در دیتاگرید نمایشش نده اما گاهی اوقات هیچ اتفاقی در دیتابیس صورت نمی گیره اگه کدم رو بررسی کنید اگه اشکالی که من نمی بینم ببینید و به من بگید یا راه حل دیگه واسش بدید ممنون میشم.
کد:
if (dataGridView1.SelectedRows.Count > 0)
                {
                    for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
                    {
                        string idcar = dataGridView1.SelectedRows[i].Cells[0].Value.ToString();
                        DataManagement.DT = DataManagement.I_U_D("select * from [carinout] where carinout.idcar=" + idcar + "", "Update carinout set dateout='" + DateTime.Now + "',userwrite=N'" + loginfrm.userwrites + "',watch='"+false +"' where carinout.idcar=" + idcar);
                       
                        
                        MessageBox.Show(".خروج ثبت شد","",MessageBoxButtons .OK ,MessageBoxIcon.Information );
                      
 
 
                    }
  showdata(); 
 
                }
                else if (dataGridView2 .SelectedRows .Count >0)
                {
                    for (int j = 0; j < dataGridView2.SelectedRows.Count; j++)
                    {
                        string idcarh = dataGridView2.SelectedRows[j].Cells[0].Value.ToString();
                        DataManagement.DT = DataManagement.I_U_D("SELECT * FROM  [halfcar] WHERE idcar='"+idcarh +"'","UPDATE [halfcar] SET dateouthalf='"+DateTime .Now +"',userwrite=N'"+loginfrm .userwrites +"',watch='"+false +"' WHERE halfcar.idcar='"+idcarh +"'");
                        MessageBox.Show(".خروج ثبت شد", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                       
                    }
 showdata();
                }
                else
                    MessageBox.Show(".وسیله ای را انتخاب نکردید","پیغام سیستم",MessageBoxButtons .OK ,MessageBoxIcon.Exclamation );
            }
            catch
            {
            }

راستی showdata(); اطلاعات بانک رو روی گریدویو نمایش میده .
دوستان اگه برای پاسخ گویی به مشکلم توضیحات بیشتری لازم دارید بگید تا بگم.

سلام
بهتر بود از پارامترها استفاده می کردید اما به نظر میرسه یا شروط گذاشته شده برای بروز رسانی درست نیست یا پارامتر رو درست نمیگیره. این کد شما بخشی از کد هست. کد کامل را پیوست کنید تا بشه بررسی کرد :gol:
 

ناآشنا

عضو جدید
کاربر ممتاز
مشکلم همون شرطا بود حل شد. یه سوال دیگه پیش اومده برام.
این فرممه خوب؟
دسترسی.jpg
میخوام وقتی زدم فعال یا غیر فعال اون ستون وضعیت به فارسی بنویسه فعال یا غیرفعال بدون اینکه به بانکم اعمال بشه یعنی فقط تو دیتاگرید اینو بنویسه چه طوری این کارو انجام بدم؟
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
مشکلم همون شرطا بود حل شد. یه سوال دیگه پیش اومده برام.
این فرممه خوب؟
مشاهده پیوست 103385
میخوام وقتی زدم فعال یا غیر فعال اون ستون وضعیت به فارسی بنویسه فعال یا غیرفعال بدون اینکه به بانکم اعمال بشه یعنی فقط تو دیتاگرید اینو بنویسه چه طوری این کارو انجام بدم؟

سلام
اصولاً اگر از Scrollافقی استفاده نشه User Friendly تر هست. مثلاً میتونی داکش کنی :gol:
در خصوص سئوال بعدیت، میخوای توی نمایشت فعال و غیر فعال بزنه ؟
در خصوص سمت کلاینت که خب میتونی dataset رو تغییر بدی بدون اینکه Update رو فراخوانی کنی که سمت سرور نره اما در خصوص نمایش میتونی در دستور select از case استفاده کنی :gol:
 

ناآشنا

عضو جدید
کاربر ممتاز
آره توی نمایشم میخوام در ستون وضعیت به جای true یا false بنویسم فعال یا غیرفعال.راستی من از بانک sql server2008 استفاده کردم .
میشه لطف کنی یه نمونه کد بنویسی؟
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
آره توی نمایشم میخوام در ستون وضعیت به جای true یا false بنویسم فعال یا غیرفعال.راستی من از بانک sql server2008 استفاده کردم .
میشه لطف کنی یه نمونه کد بنویسی؟

کد:
SELECT        INV.Stock.StockCode AS [کد انبار], INV.Stock.StockName AS [عنوان انبار], 
                [اسناد تعدادي] = CASE INV.StkCrspnd.Reg WHEN 1 THEN 'مجاز' WHEN 0 THEN 'غير مجاز' END, 
                [بهنگام رساني] = CASE INV.StkCrspnd.Upd WHEN 0 THEN 'غير مجاز' WHEN 1 THEN 'مجاز' END,
                [وضعيت در انبار] = CASE INV.StkCrspnd.Active WHEN 0 THEN 'غير فعال' WHEN 1 THEN 'فعال'  END,
                       GNR.Crspnd.NickName AS [نام کاربري], GNR.Crspnd.FName + SPACE(1) + GNR.Crspnd.LName AS  [عنوان شخص],
                         [وضعيت کاربر] = CASE GNR.Users.Active WHEN 0 THEN 'غير فعال' WHEN 1 THEN 'فعال' END
FROM            INV.StkCrspnd INNER JOIN
                         INV.Stock ON INV.StkCrspnd.StockRef = INV.Stock.Serial INNER JOIN
                         GNR.Crspnd ON INV.StkCrspnd.CrspndRef = GNR.Crspnd.Serial LEFT OUTER JOIN
                         GNR.Users ON GNR.Crspnd.Serial = GNR.Users.CrspndRef AND GNR.Crspnd.Serial = GNR.Users.CrspndRef
ORDER BY INV.Stock.StockName

اینو گذاشتم که فقط دستور Case رو ببینی. سرچ هم بزنی پیداش میکنی عزیز :gol:
 

ناآشنا

عضو جدید
کاربر ممتاز
یه نمونه ساده تر پیدا کردم :

کد:
SELECT  Expr1 = 
      CASE نام ستون
         WHEN 'شرط 1' THEN 'خروجی'
         WHEN 'شرط 2' THEN 'خروجی'
         ELSE 'خروجی'
      END

من با این دستور زیاد کار نکردم. میشه راهنماییم کنی:gol: الان به جایExpr1 چی باید بنویسم؟
یه نمونه دیگه هم پیدا کردم اینطوری
کد:
USE mydatabase;  
SELECT product, 
      'Status' = CASE    
    WHEN quantity > 0 THEN 'in stock'     
    ELSE 'out of stock'   
      END FROM dbo.inventory;
خروجیش این بود:
productStatus
19" LCD Screenin stock
HP Printerin stock
Penin stock
Staplerin stock
Hanging Filesin stock
Laptopin stock

الان با توجه به این کد دومی من برای برنامه ی خودم یه متغیر دارم با نامpaguser که اگه true باشه کاربر فعاله اگه false باشه غیرفعاله
اسم جدولم هم login هست.
اینطوری باید بنویسم؟
کد:
select paguser,
'نمیدونم'=case
when 'true' then 'فعال'
when 'false' then 'غیرفعال'
else 'فعال'
end from db.login
 
آخرین ویرایش:

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
عزیزم به جای نمیدونم باید عنوان فیلد در خروجی رو بذاری یعنی مثلاً عنوان فیلدی که ستون گریدت با اون بایند شده. جلوی Case هم فیلدی میاد که داری روش کار می کنی. مثالی که گذاشتم چون دقيقاً روی بیت کار میکنه عین همون رو میتونی استفاده کنی :gol:
 

ناآشنا

عضو جدید
کاربر ممتاز
ممنون نگین جان:redface: ببخشید من اینقدر مزاحمت میشم یه سوال دیگه هم دارم.:D
اگه بخوام برای درج یه رکورد در گریدویو محدودیت زمانی بذارم چه کار باید بکنم؟ البته همون دیتابیس که تغییر میکنه روی گرید اعمال میشه من میخوام همین فرم دسترسی کاربر رو طوری تنظیم کنم که کاربر نتونه بعد مثلا یک ساعت دیگه تغییری در دیتابیس بده اون دکمه ها غیرفعال بشن. منظورمو رسوندم؟
فک میکنم باید از timespan استفاده کنم اما نمی دونم چه جوری راهنمایی میکنی؟:smile:
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
ممنون نگین جان:redface: ببخشید من اینقدر مزاحمت میشم یه سوال دیگه هم دارم.:D
اگه بخوام برای درج یه رکورد در گریدویو محدودیت زمانی بذارم چه کار باید بکنم؟ البته همون دیتابیس که تغییر میکنه روی گرید اعمال میشه من میخوام همین فرم دسترسی کاربر رو طوری تنظیم کنم که کاربر نتونه بعد مثلا یک ساعت دیگه تغییری در دیتابیس بده اون دکمه ها غیرفعال بشن. منظورمو رسوندم؟
فک میکنم باید از timespan استفاده کنم اما نمی دونم چه جوری راهنمایی میکنی؟:smile:

سلام. خواهش میشه عزیز :gol:
ببین این محدودیت رو معمولاً در ویرایش ها اعمال می کنند، چون باید یه ساعت پایه داشته باشی (مثل ساعت ثبت اطلاعات) که بتونی باهاش مقایسه کنی، اگر من اشتباه متوجه شدم توضیح بده لطفاً :gol: من اصولاً یک سری موارد این چنینی را سمت سرور چک میکنم تا کسی کلک نزنه :gol:
 

ناآشنا

عضو جدید
کاربر ممتاز
سلام. خواهش میشه عزیز :gol:
ببین این محدودیت رو معمولاً در ویرایش ها اعمال می کنند، چون باید یه ساعت پایه داشته باشی (مثل ساعت ثبت اطلاعات) که بتونی باهاش مقایسه کنی، اگر من اشتباه متوجه شدم توضیح بده لطفاً :gol: من اصولاً یک سری موارد این چنینی را سمت سرور چک میکنم تا کسی کلک نزنه :gol:

درسته من ساعت ثبت دارم حالا باید چی کا کنم؟:redface:
 

A.S.Roma

عضو جدید
کاربر ممتاز
درسته من ساعت ثبت دارم حالا باید چی کا کنم؟:redface:
شما زمان ثبت ویرایش زمان فعلی سیستم (سرور) رو بگیر با زمان ثبت رکورد مقایسه کن اگر قابل قبول بود اجازه ی ثبت بده در غیر اینصورت پیغام خطا چاپ کن یا هر کار دیگری !
 

Similar threads

بالا