امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل دیتاگرید هنگام مقداردهی خاصیت RightToLeft در e.Control
#1
موقعی که دیتاگرید به حالت ویرایش در میاد و یه جعبه متن برای تغییر مقدار سلول متنی نمایش داده میشه رویداد EditingControlShowing فراخوانی میشه.
ورود دیتاگرید به حالت ویرایش ممکنه توی حالت های زیر اتفاق بیفته:
فشردن کلید F2 روی سلول متنی
کلیک روی سلول انتخاب (Highlight) شده
فشردن یک کلید و رفتن به حالت ویرایش در حالی که مقدار جعبه متن ویرایشگر برابر کاراکتر کلید فشرده شده خواهد بود
با ورود به هر سلول (اصلا رایج نیست و کمی آزاردهنده است)
ترکیبی از فشردن کلید F2 و فشردن کلیدهایی که منجر به تایپ یک کاراکتر میشن
توسط برنامه نویس

وقتی دیتا گرید ویو به حالت ویرایش میره عکس یک قلم (مداد) توی سرردیف (RowHeader) یا همون ستون کِناری، ظاهر میشه.
البته اگر خاصیت RowHeadersVisible برابر true باشه.
   
بحث ما روی اون کنترل جعبه متن (TextBox) هست که موقع ویرایش سلول های متنی دیتا گرید ویو ظاهر میشه
شما حتی میتونید برای این جعه متن، رویداد هم بنویسید
البته باید بدونیم که این کنترل در رویداد EditingControlShowing ساخته میشه و بعد از پایان ویرایش Dispose شده و از بین میره
یعنی شما اگر بخواین خاصیتی ازش رو عوض کنید یا رویدادی بهش اضافه کنید باید کدهاتون رو توی رویداد EditingControlShowing بنویسید تا با هر بار ساخته شدن این کنترل، کدهای شما اجرا بشه.

شاید بخواین خاصیت RightToLeft این کنترل رو مقدار بدین.
مثلا اگر محتوای ستون، فارسی بود، راست به چپ باشه و اگر انگلیسی یا عددی بود، چپ به راست بشه.
کد php:
private void EditingControlShowing(object senderDataGridViewEditingControlShowingEventArgs e)
{
 
   if ((sender as DataGridView).CurrentCell.OwningColumn.Name == "MyNumericColumn")
 
       e.Control.RightToLeft System.Windows.Forms.RightToLeft.No;
 
   else
        e
.Control.RightToLeft System.Windows.Forms.RightToLeft.Yes;


مشکلی که پیش میاد اینه که با مقدار دهی به خاصیت خاصیت RightToLeft در e.Control، حالیت ویرایش دیتا گرید ویو دیگه به درستی کار نمیکنه و گرچه با رفتن به حالت ویرایش، باز هم این کنترل نمایش داده میشه و کاربر ظاهرا داره مقدار سلول رو ویرایش می کنه، اما نه دیگه عکس قلم توی سرردیف میاد و نه بعد از پایان ویرایش، مقدار سلول به روز میشه!
   
مشکل چیه؟
نمیدونم! شاید واقعا برنامه نویس مایکروسافت اشتباه کرده.

راه حل چیه؟
بعد از تست های مختلف، یک راه جواب داد. اگر خاصیت Text این کنترل عوض بشه دیگه با مقدار دهی به خاصیت خاصیت RightToLeft ش، مشکلی پیش نمیاد.

اما با توجه به اینکه کاربر گاهی با فشردن یک کاراکتر و گاهی با کلیک ماوس یا کلید F2 وارد حالت ویرایش میشه، طوری باید مقدار Text رو عوض کنیم که کاربر متوجه نشه!
این هم کد:
کد php:
private void EditingControlShowing(object senderDataGridViewEditingControlShowingEventArgs e)
{
 
   string temp e.Control.Text;
 
   e.Control.Text += " ";
 
   e.Control.Text temp;
 
   if ((sender as DataGridView).CurrentCell.OwningColumn.Name == "MyNumericColumn")
 
       e.Control.RightToLeft System.Windows.Forms.RightToLeft.No;
 
   else
        e
.Control.RightToLeft System.Windows.Forms.RightToLeft.Yes;

پاسخ
roseتشکر شده توسط:


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان