PDA

View Full Version : تفاوت انجام rowleave در گریدویو با tab یا با جهت نماها



hojjat_gh
یک شنبه 05 آبان 1387, 23:02 عصر
با سلام به همه دوستان
نمیدونم کسی تا به حال با مشکل برخورد داشته یا نه
ولی الان من به کمک همه شما دوستان نیاز دارم
من یک دیتا گرید ویو دارم که از طریق جدول دیتا بیس بایند شده
حالا روی یکی از سلولهای گرید میرم(که حاوی اطلاعات جدوله) وسپس شروع به تاپپ میکنم وبعد از سلول خارج میشم وچون من با محتویات سلول تو rowleave کار دارم زمانی که با tabاز سطر خارج میشم محتویات سلول رو به من میده ولی اگه با جهت نما ها از سطر خارج بشم نمیتونه محتویات جدید رو به من بده وهمون محتویات قبلی بایند شده از بانک رو به من میده
چطوری میتونم این مشکل رو حل کنم؟
باتشکر

hojjat_gh
دوشنبه 06 آبان 1387, 18:30 عصر
دوستان من یه جور دیگه سوال رو مطرح کنم
اگه شما بخواهید سطری از گرید ویو رو در بانکتون ذخیره کنید وکدهای اینسرت سطر رو در rowleave سطر بنویسید اگه سطر رو از طریق کلید tabترک کنید سطر ذخیره میشه ولی اگه از طریق کلید جهت نما سطر رو ترک کنیم(مثلا به سلول زیر اون بیایم) , ثبت نمیشه!!
چطوری میشه این مشکل رو حل کرد ؟؟

SMRAH1
دوشنبه 06 آبان 1387, 23:06 عصر
سلام

منطقا زمانی که کاربر دکمه های Tab یا Enter رو می زنه منظورش تایید داده ها است و زدن دکمه های Esc یا جهت بر بالا و ...،به مفهوم انصراف است.برای اینکه این وضعیت را تغییر دهید باید رویداد های کنترل مورد نظر را خودتان (برای تغییر این وضعیت) دریافت و مدیریت کنید تا به جای رفتار پیشفرض،فرآیند مد نظر شما صورت پذیرد!

موفق باشید

hojjat_gh
سه شنبه 07 آبان 1387, 09:51 صبح
با تشکر
شاید حق با شما باشه ولی من یه چیزی میخوام شبیه تیبل های اس کیو ال طراحی کنم که اگه به تیبلهاش دقت کنید اگه اطلاعات رو در سطر وارد کنید وبه هر شکلی از سطر خارج بشید(چه با tabیا با جهت نماها یا...)تغیرات روی سطر تیبل اعمال میشه
من یه همچین چیزی میخوام !؟

SMRAH1
سه شنبه 07 آبان 1387, 18:08 عصر
سلام دوست من
من الان تست کردم ،مشکلی که شما گفتین رو ندیدم.در واقع داده ها با Entar،Tab و کلید های جهت بر، تثبیت می شوند وبا Esc انصراف داده می شود.البته رویداد RowLeave فقط در زمانی که ردیف انتخابی تغییر کند (و نه اینکه داده ای از ردیف تغییر کند) فراخوانی می شود.در ضمن در DataGridViewCellEventArgs این رویداد ،ایندکس ردیف و ستونی که در آخرین بار در ردیف ترک شده،روی آن سلول بوده اید را به شما می دهد که در هر حال داده های این سلول (بر عکس بقیه سلول های ردیف مذکور) در هنگام دریافت این پیغام هنوز به روز رسانی نشده است.

برای رفع این مشکل پیشنهاد می کنم به جای دریافت پیغام RowLeave از پیغام RowValidated که مانند همان RowLeave بوده با این تفاوت که پس از اعتبار سنجی داده ها و به روز رسانی پایگاه داده فراخوانی می شود،استفاده کنید.
تکرار این موضوغ ضروری می نماید که فراخوانی این متد نه با تغییر در داده های هر ردیف بلکه با ترک ردیف جاری و بعد از بروز رسانی داده ها (چنانچه خطایی در بروز رسانی موجود نباشد مانند عدم همانگ بین داده ها - یک داده رشته ای رو به جای داده int گذاشته باشید یا تکرار کلید جدول)،صورت می پذیرد.
برای مدیریت فرایند اعتبار سنجی هم می توانید از رویداد RowValidatting استفاده کنید.

موفق باشید

hojjat_gh
چهارشنبه 08 آبان 1387, 13:59 عصر
با سلام
من میخواستم یه تشکر ویزه از شما دوست عزیز بکنم چون من طی دو روز حدود 11 الی 12 ساعت با این مشکل در گیر بودم و پی به به این نکته ظریف نبرده بودم و الان به کمک شما اونو حلش کردم
وهمچنین میخواستم از بقیه دوستانی که تو سایت واقعا وقت میذارن و دیگر دوستان رو راهنمایی میکنن تشکر کنم
باز هم ممنون