PDA

View Full Version : شمارش ردیف های دیتاگرید بصورت شرطی



شهابسلطانی
شنبه 17 شهریور 1403, 13:59 عصر
سلام
روز بخیر
من یه دیتا گرید دارم که فعلا به جایی بایند نیست و توسط کاربر بصورت دستی پر میشه
حالا میخوام با یه شرط تعداد نفراتی که امتیازشون از صفر بزرگتره رو متوجه بشم
این کد رو نوشتم ولی جواب نگرفتم


for (int i = 0; i < DGVOrganScore.RowCount -1; i++)
{


LblAverage.Text = (Convert.ToInt32(DGVOrganScore.Rows[i].Cells["Score"].Value) > 0).ToString();
}

shahryari
شنبه 17 شهریور 1403, 15:32 عصر
LblAverage.Text = (Convert.ToInt32(DGVOrganScore.Rows[i].Cells["Score"].Value) > 0).ToString();
سلام آخه اینجوری نمیشه که ، همیشه آخرین مورد رو نشون میده

حداقل اینجوری بنویس تست کن

LblAverage.Text += "(" + (Convert.ToInt32(DGVOrganScore.Rows[i].Cells["Score"].Value) > 0).ToString() + ") ";

ROSTAM2
شنبه 17 شهریور 1403, 20:03 عصر
سلام
روز بخیر
من یه دیتا گرید دارم که فعلا به جایی بایند نیست و توسط کاربر بصورت دستی پر میشه
حالا میخوام با یه شرط تعداد نفراتی که امتیازشون از صفر بزرگتره رو متوجه بشم
این کد رو نوشتم ولی جواب نگرفتم



for (int i = 0; i < DGVOrganScore.RowCount -1; i++)
{


LblAverage.Text = (Convert.ToInt32(DGVOrganScore.Rows[i].Cells["Score"].Value) > 0).ToString();
}


سلام

شما می خوای جمع عدد توی هر خونه رو داشته باشی !! پس اون >0 اونجا چی می گه؟!؟؟!

شهابسلطانی
سه شنبه 20 شهریور 1403, 15:50 عصر
سلام

شما می خوای جمع عدد توی هر خونه رو داشته باشی !! پس اون >0 اونجا چی می گه؟!؟؟!

نه اصلا جمع نمیخوام
من دنبال count هستم
میخوام توی دیتاگرید ویو بدونم ردیفهایی که بزرگتر از صفر هستن چندتا هستن؟

Mahmoud.Afrad
پنج شنبه 22 شهریور 1403, 08:17 صبح
سلام
روز بخیر
من یه دیتا گرید دارم که فعلا به جایی بایند نیست و توسط کاربر بصورت دستی پر میشه
حالا میخوام با یه شرط تعداد نفراتی که امتیازشون از صفر بزرگتره رو متوجه بشم
این کد رو نوشتم ولی جواب نگرفتم


for (int i = 0; i < DGVOrganScore.RowCount -1; i++)
{


LblAverage.Text = (Convert.ToInt32(DGVOrganScore.Rows[i].Cells["Score"].Value) > 0).ToString();
}


منطق کدی که نوشتی با چیزی که میخواهی اصلا همخوانی نداره.

خودت اگر بخواهی بشماری چطور عمل میکنی؟! همونو کد کن

ShayanFiroozi
شنبه 31 شهریور 1403, 22:25 عصر
سلام

در رویداد CellFormatting دیتاگرید کد بنویسید :

حلقه For هم نیازی نیست !


if (Convert.ToInt32(DGVOrganScore.Rows[e.RowIndex].Cells["Score"].Value) > 0)
{
DGVOrganScore.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.ForeColor= Color.FromArgb(0, 255, 0); // Make the Positive score green ;)
}



برای تعداد Score های بالای صفر هم در رویداد RowsAdded میتونی محاسبه کنی ( اصولش این بود که در رویداد DataBindingComplete بنویسی ولی چون شما به جایی Bind نیستی نمیشه)

در رویداد RowAdded میتونی یه متغییر int که در Scope بیرون از رویداد تعریف شده رو Increase کنی.



if (Convert.ToInt32(DGVOrganScore.Rows[e.RowIndex].Cells["Score"].Value) > 0)
{
PositiveScoresCounter++;
}

mazoolagh
یک شنبه 01 مهر 1403, 13:45 عصر
سلام

حلقه For هم نیازی نیست !

برای تعداد Score های بالای صفر هم در رویداد RowsAdded میتونی محاسبه کنی
در رویداد RowAdded میتونی یه متغییر int که در Scope بیرون از رویداد تعریف شده رو Increase کنی.


if (Convert.ToInt32(DGVOrganScore.Rows[e.RowIndex].Cells["Score"].Value) > 0)
{
PositiveScoresCounter++;
}



سلام و روز خوش
این کد شما اشکال داره!

یکی این که رخداد rowsadded وقتی اجرا میشه که یک row به دیتاگرید اضافه بشه،
حتی پیش از cellbeginedit ،
یعنی در اون موقع هنوز هیچ مقداری واسه سلول ها مشخص نیست،
پس اون if هیچوقت true نمیشه چون همیشه مقداراون سلول (و همچنین بقیه سلول ها) null هست.

مورد دیگه این هست که کاربر ممکنه بعدا اون row رو پاک کنه،
یا مقدار اون سلول مورد نظر رو ویرایش کنه جوری که در شمارش موثر باشه،
که خب با این کد قابل تشخیص نیست.

شما نمیتونین بدون لوپ اینو انجام بدین،
مگر این که در cellbeginedit مقدار سلول رو یه جایی نگهدارین
و در cellendedit مقایسه کنین
و تازه حواستون به nullها هم باشه.

خلاصه این که ساده ترین و مطمئنترین راه همون حلقه ساده است،
کافی هست در رویداد cellvaluechanged و همچنین rowsremoved انجام بشه.