PDA

View Full Version : خارج شدن از رویداد Cell Validating



searcher_man
پنج شنبه 04 آبان 1391, 12:55 عصر
با سلام. ضمن عرض خسته نباشید و تبریک به مناسبت عید قربان

من در رویداد CellValidating دیتاگرید شرطی گذاشتم که اگر مقدار وارد شده تکراری بود پیغام خطا می دهد به شکل زیر


MessageBox.Show("شماره وارد شده قبلاً مورد استفاده قرار گرفته است", "");
e.Cancel = true;


حال اگر کاربر بر روی یکی از ستونهایی که قبلا داده وارد شده اشتباها وارد شود، مجدد این شرط در CellValidating اجرا می شود و پیغام خطا می دهد. حال اگر بخواهیم کاربر با زدن کلید Escape از آن ستون خارج شود باید چه کاری انجام بدیم ؟؟

با تشکر

aryasoft2872
پنج شنبه 04 آبان 1391, 15:56 عصر
خوب به جاش می تونید توی دیتابیستون اون ستون رو Unique تعریف کنید بعد توی برنامه با try...catch خطاشو بگیرید

searcher_man
شنبه 06 آبان 1391, 08:40 صبح
خوب به جاش می تونید توی دیتابیستون اون ستون رو Unique تعریف کنید بعد توی برنامه با try...catch خطاشو بگیرید

با سلام. با تشکر از پاسختون، روش بسیار خوبی پیشنهاد دادید، اما من مثال زدم، ولی می خوام اگر زمانی از این رخداد CellValidation استفاده کردم، {مثلا کاربر حتماً در یک ستون عدد وارد کند، در اینجا به نظر من بهترین روش استفاده از این رخداد هست} چگونه می توان با زدن کلید Escape فرمان e.Cancel = false; را صادر کرد تا بتوان از آن سلول خارج شد. مثلاً بعد از زدن کلید Escape به سلول دیگری هدایت شود و e.Cancel = false; نیز اجرا گردد تا بتوان از آن سلول خارج شد. ممنون می شوم توضیح دهید.
با تشکر فراوان

حسین شهریاری
شنبه 06 آبان 1391, 10:26 صبح
آیا ستون مربوطه را محدود کردید؟
فرض کنین فیلد فیلد مورد نظر شما فیلد id باشه:

if (e.columnindex==0)
{
}
با این کار شرط فقط روی ستون مربوطه اعمال میشه.

searcher_man
شنبه 06 آبان 1391, 11:07 صبح
آیا ستون مربوطه را محدود کردید؟
فرض کنین فیلد فیلد مورد نظر شما فیلد id باشه:

if (e.columnindex==0)
{
}
با این کار شرط فقط روی ستون مربوطه اعمال میشه.

با تشکر از پاسختون. بله ستون مربوطه رو محدود کردم، فقط روی همان ستون شرط اعمال می شود ولی وقتی کاربر وارد آن ستون می شود هیچ راهی برای خروج ندارد تا زمانی که اطلاعات را صحیح وارد کند، تا e.Cancel = true; اجرا نشود و بتواند از آن ستون خارج شود. بعضی وقتها اتفاق می افتد که کاربر وارد ستونی می شود که رخداد DataValidating در آن اجرا می شود، کاربر هیچ راه خروجی ندارد جزء اینکه یا اطلاعات صحیح را وارد کند تا شرط e.Cancel = true; اجرا نشود یا برنامه باید End Process شود. ممنون می شوم راهکاری ارائه دهید که اگر کاربری وارد ستونی شد که رخداد DataValidating در آنجا اجرا می شد، بتواند اگر اطلاعات صحیحی را هم وارد نکرد با زدن کلید Escape از آن خارج شود. با تشکر

searcher_man
چهارشنبه 10 آبان 1391, 11:36 صبح
هنوز هیچ راه حلی پیدا نکردم.:گریه: شما چطور ؟:متفکر:

aryasoft2872
چهارشنبه 10 آبان 1391, 16:14 عصر
راه اصولی و جالبی نیست ولی یک متغیر سراسری تعریف کنید و توی رویداد keyup گرید اگر کلید Escape زده می شد متغیر رو true و در غیر اینصورت false ش کنید.حالا توی callValidating چک کنید اگر true بود کنسل کنید عملیاتو ولی بازم تاکید می کنم راه اصولی همونیه که اول تاپیک گفتم.