PDA

View Full Version : سوال: روش غیرفعال کردن انتخاب خودکار ردیف گریدویو در هنگام اجرا(Disable auto row selection in GridView)



mahdibham
شنبه 12 آذر 1401, 10:14 صبح
سلام و وقت بخیر..
من سه تا فرم دارم و توی هر سه تاش گریدویو دارم و هر سه تاش باهم رابطه داره.. در هنگام باز شدن فرم و اجرای هر کدوم از برنامه ها هم عملیاتی ایجاد کردم که فعال میشه و میخوام در هنگام این اجرا، ردیف اول گریدویو به صورت خودکار انتخاب نشده باشه..

dgv.CurrentRow.Selected = false;

این کد بالای در فرم لود بعد از بایندیگ گذاشتم که بعضی وقتا گیر میده و این خطارو میده: "Object reference not set to an instance of an object" و بعضی وقتاهم کار میکنه..

ROSTAM2
شنبه 12 آذر 1401, 11:54 صبح
سلام و وقت بخیر..
من سه تا فرم دارم و توی هر سه تاش گریدویو دارم و هر سه تاش باهم رابطه داره.. در هنگام باز شدن فرم و اجرای هر کدوم از برنامه ها هم عملیاتی ایجاد کردم که فعال میشه و میخوام در هنگام این اجرا، ردیف اول گریدویو به صورت خودکار انتخاب نشده باشه..

dgv.CurrentRow.Selected = false;

این کد بالای در فرم لود بعد از بایندیگ گذاشتم که بعضی وقتا گیر میده و این خطارو میده: "Object reference not set to an instance of an object" و بعضی وقتاهم کار میکنه..

سلام.
رویداد Shown از فرم رو امتحان کن.

mahdibham
شنبه 12 آذر 1401, 12:37 عصر
سلام.
رویداد Shown از فرم رو امتحان کن.

نشد.. دوباره همون پیام رو داد
'Object reference not set to an instance of an object.'

ROSTAM2
شنبه 12 آذر 1401, 13:07 عصر
نشد.. دوباره همون پیام رو داد
'Object reference not set to an instance of an object.'

CurrentRow اشتباهه باید Rows[0] رو بجای اون بکار بگیری. قبلا متوجه نشدم. البته با این شرط که ردیفی داشته باشه چرا که شما گفتید می خواهید ردیف اول رو غیرفعال کنید.


dgv.CurrentRow.Selected = false;


اگر خواسته شما اینه که کلا هیچ آیتمی در حال انتخاب نباشه اون ی چیز دیگه است و فکر کنم اگه فوکوس از روی شیء برداشته بشه هیچ انتخابی نداشته باشه .
در هر صرت اگر هم CurrentRow رو می خواهید استفاده کنید بهتر هست مشروط به داشتن ردیف و انتخاب بودن ردیف باشه تا خطا نداشته باشید.

Mahmoud.Afrad
شنبه 12 آذر 1401, 13:10 عصر
Currentrow را null کنید.
در ایونت مناسب البته.

mahdibham
یک شنبه 13 آذر 1401, 09:31 صبح
CurrentRow اشتباهه باید Rows[0] رو بجای اون بکار بگیری. قبلا متوجه نشدم. البته با این شرط که ردیفی داشته باشه چرا که شما گفتید می خواهید ردیف اول رو غیرفعال کنید.


dgv.CurrentRow.Selected = false;

اگر خواسته شما اینه که کلا هیچ آیتمی در حال انتخاب نباشه اون ی چیز دیگه است و فکر کنم اگه فوکوس از روی شیء برداشته بشه هیچ انتخابی نداشته باشه .
در هر صرت اگر هم CurrentRow رو می خواهید استفاده کنید بهتر هست مشروط به داشتن ردیف و انتخاب بودن ردیف باشه تا خطا نداشته باشید.

ببخشید متوجه جمله اخرتون نشدم.. اگر واضح بیان کنید ممنونتون میشم..

mahdibham
یک شنبه 13 آذر 1401, 09:37 صبح
Currentrow را null کنید.
در ایونت مناسب البته.

CurrentRow که اصلا nullable نیست.. دقیقا چطور میشه مقدار نال رو بهش داد؟ چون هر یک از اعتبار های دیگش هم رو نمیشه نال کرد.

ROSTAM2
یک شنبه 13 آذر 1401, 11:58 صبح
ببخشید متوجه جمله اخرتون نشدم.. اگر واضح بیان کنید ممنونتون میشم..

در مورد CurrecntRow و شرط گذاری با دستور شرطی If متونید از خصوصیت Selected استفاده کنید چرا که زمانی که هیچ ردیفی انتخاب نیست پس CurrentRow هیچ مقداری از نوع DataGridViewRow نداره که خصوصیت Selected از اون فراخوانی بشه برای همین هم خطا داره.


if (dgv.CurrentRow != null)
{
dgv.CurrentRow.Selected = false;
}


برای حذف همه ردیف ها از حالت Select از متود ClearSelection (https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.clearselection?v iew=windowsdesktop-7.0#system-windows-forms-datagridview-clearselection) استفاده می شه، حالا خواسته شما رو برآورده می کنه رو نمی دونم.

توی این تاپیک هم گفته شده که برای خارج کردن از حالت انتخاب اولین ردیف یا سلول از CurrentCell = null استفاده می شه. (https://stackoverflow.com/questions/4314673/how-to-deselect-all-selected-rows-in-a-datagridview-control)

mahdibham
دوشنبه 14 آذر 1401, 10:08 صبح
در مورد CurrecntRow و شرط گذاری با دستور شرطی If متونید از خصوصیت Selected استفاده کنید چرا که زمانی که هیچ ردیفی انتخاب نیست پس CurrentRow هیچ مقداری از نوع DataGridViewRow نداره که خصوصیت Selected از اون فراخوانی بشه برای همین هم خطا داره.


if (dgv.CurrentRow != null)
{
dgv.CurrentRow.Selected = false;
}


برای حذف همه ردیف ها از حالت Select از متود ClearSelection (https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.clearselection?v iew=windowsdesktop-7.0#system-windows-forms-datagridview-clearselection) استفاده می شه، حالا خواسته شما رو برآورده می کنه رو نمی دونم.

توی این تاپیک هم گفته شده که برای خارج کردن از حالت انتخاب اولین ردیف یا سلول از CurrentCell = null استفاده می شه. (https://stackoverflow.com/questions/4314673/how-to-deselect-all-selected-rows-in-a-datagridview-control)


مرسی. عالی. این کارساز بود.