PDA

View Full Version : فعال و غیر فعال کردن چک باکس با چک باکس داخل گریدویو



safari_m4
سه شنبه 10 آبان 1401, 06:21 صبح
با سلام من یک گریدویو دارم و یک چک باکس حالا در داخل گریدویوی من ستون اول آن چک باکس می باشد می خواهم وقتی تمام چک باکس های ستون گریدویو چک آن تیک خود یا فعال شد چک باکس من هم فعال شود و چنانچه تمام چک باکسهای داخل گریدو غیرفعال شد چک باکس هم غیر فعال بشود - در کدام رویداد کدهای نوشته شود با تشکر و سپاس

mazoolagh
سه شنبه 10 آبان 1401, 11:28 صبح
سلام و روز خوش

2 رویداد رو باید استفاده کنین.
با فرض این که اسم گرید شما DGV و اسم چک باکس شما CB و اسم فیلد چک باکس هم IsOK باشه:

1- یکی CurrentCellDirtyStateChanged هست که به این صورت مینویسین:
SUB DGV_CURRENTCELLDIRTYSTATECHANGED(....)
DGV.COMMITEDIT(DATAGRIDVIEWDATAERRORCONTEXTS.COMMI T)
END SUB

mazoolagh
سه شنبه 10 آبان 1401, 11:43 صبح
2- رویداد بعدی CellValueChanged که در اون به اینصورت عمل میکنین (با فرض این که گرید bound هست) :
SUB DGV_CELLVALUECHANGED(....)
IF E.COLUMNINDEX=0 THEN
DGV.DATASURCE.ACCEPTCHANGES()
CB.CHECKED= (DGV.DATASOURCE.COMPUTE("COUNT(IsOK)" , "IsOK")=DGV.DATASOURCE.ROWS.COUNT)
END IF
END SUB

در اینجا با compute تعداد row های جدول datasource رو که فیلد IsOK اونها تیک خورده رو میشمریم و با تعداد کل row ها مقایسه میکنیم،
اگر بربر باشه اونوقت چک باکس CB رو تیک میزنیم.

mazoolagh
سه شنبه 10 آبان 1401, 11:47 صبح
البته اینجوری هم میتونیم بنویسیم:
CB.CHECKED= (DGV.DATASOURCE.COMPUTE("COUNT(IsOK)" , "NOT IsOK")=0)

که اینبار تعداد تیک نخورده ها رو میشمریم که باید 0 باشه

safari_m4
سه شنبه 10 آبان 1401, 16:47 عصر
[QUOTE=mazoolagh;2453949]البته اینجوری هم میتونیم بنویسیم:
CB.CHECKED= (DGV.DATASOURCE.COMPUTE("COUNT(IsOK)" , "NOT IsOK")=0)

که اینبار تعداد تیک نخورده ها رو میشمریم که باید 0 باشه[/QUOT

با درود و تشکر از پاسخ تان
دوست عزیز منظور از (با فرض این که گرید bound هست) چیست
و اینکه در سی شارپ compute و ACCEPTCHANGES کاربردی ندارد میشه کد معادل سی شارپ آنرا لطف کنید به عبارتی کد استفاده شده در CellValueChanged در سی شارپ کلا خطا می ده
if (e.ColumnIndex == 0)
{
DgvKala.DataSource.ACCEPTCHANGES();
ChkAnbar.Checked = (DgvKala.DataSource.COMPUTE("COUNT(IsOK)", "IsOK") == DgvKala.DataSource.ROWS.COUNT);
}
مجدد تشکر و سپاس