PDA

View Full Version : حرفه ای: مشکل این کد برای جمع زدن همه ی مقادیر چهارمین ردیف دیتاگریدویو



Alireza.imani
دوشنبه 27 آذر 1391, 19:52 عصر
سلام دوستان...من در یک ردیف از گریدویو چند عدد دارم که گریدویوم به شکل زیر است:

http://4ax.ir/images/cq0dJ.jpg

با کد زیر 400 و 200 رو می خوام جمع بزنم اما ارور می ده:

var FU = (from row in dataGridViewX1.Rows.Cast<DataGridViewRow>() select (int)(row as DataGridViewRow).Cells[4].Value).Sum();
labelX1.Text = (Convert.ToDouble(FU)).ToString();
labelX2.Visible = true;

این هم از ارور:

http://4ax.ir/images/6mXvR.jpg

plus
دوشنبه 27 آذر 1391, 20:07 عصر
من زیاد Linq م خوب نیست میتونی ازین کد استفاده کنی:


double sum = 0.0;
for (int i = 0; i < datagGridView1.Rows.Count; i++)
{
object value = dataGridView1.Rows.SharedRow(i).Cells[4].Value;
if (value != null && value != DBNull.Value)
{
if (value is string)
{
sum += double.Parse(value);
}
else
{
sum += (double)value;
}
}
}

توجه کنید که اگه ستون مربوطه به DataTable بایند نشده باشه و یا باید شده باشه ولی نوع اون ستون توی DataTable از نوع رشته باشه، باید Parse انجام بشه (که توی کد بالا انجام شده) تا خطا ایجاد نشده.در غیر این صورت شرط به صورت زیر میشه:


if (value != null && value != DBNull.Value)
{
sum += (double)value;
}

Alireza.imani
دوشنبه 27 آذر 1391, 20:17 عصر
نــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــوچ...باز هم ارور می ده::گریه:

Specified cast is not valid.

plus
دوشنبه 27 آذر 1391, 20:39 عصر
خوب نوع داده ای که توی اون ستونه مشکل داره ظاهرا. اینو بگذار ببینیم نوعش چیه؟

if (value != null && value != DBNull.Value)
{
if (value is string)
{
sum += double.Parse(value);
}
else
{
try
{
sum += (double)value;
}
catch (Exception)
{
MessageBox.Show(String.Format("Invalid value type: {0}, ToString(): {1}", value.GetType(), value));
}
}
}

مهرداد صفا
دوشنبه 27 آذر 1391, 20:42 عصر
سلام ببخشید
قبل از هر چیز اندیس چهار برای پنجمین ستون است که باید از اندیس 3 استفاده کنید. اشاره به این قسمت:
DataGridViewRow).Cells[4]
از کد.

plus
دوشنبه 27 آذر 1391, 20:44 عصر
سلام ببخشید
قبل از هر چیز اندیس چهار برای پنجمین ستون است که باید از اندیس 3 استفاده کنید. اشاره به این قسمت:
DataGridViewRow).Cells[4]
از کد.

اصلا به این نکنه توجه نکردم ظاهرا مشکل دوستمون همینه.

Alireza.imani
دوشنبه 27 آذر 1391, 20:51 عصر
سلام ببخشید
قبل از هر چیز اندیس چهار برای پنجمین ستون است که باید از اندیس 3 استفاده کنید. اشاره به این قسمت:
DataGridViewRow).Cells[4]
از کد.

سلام...دوست خوبم...عکس مشکل داره و گرنه اندیس رو درست گذاشته ام.

Alireza.imani
دوشنبه 27 آذر 1391, 21:11 عصر
سلام...کدتون رو اصلاح کردم و موفق شدم:



double sum = 0.0;

for (int i = 0; i < dataGridViewX1.Rows.Count; i++)
{

object value = dataGridViewX1.Rows.SharedRow(i).Cells[4].Value;

if (value != null && value != DBNull.Value)
{


sum += (Convert.ToDouble(value));
labelX1.Text = sum.ToString();
labelX2.Visible = true;





}

}

plus
دوشنبه 27 آذر 1391, 21:13 عصر
شما بهتره بعد از اتمام حلقه متغیر sum رو به متن Label نسبت بدی نه داخل حلقه.

S.Reza
سه شنبه 28 آذر 1391, 11:50 صبح
بدون اینکه به کد توجه داشته باشیم میتوان حدس زد که مشکل از کجاست

مشکل اینکه ردیف اول دارای مقدار 200 و ردیف دوم دارای مقدار 400 و ردیف سوم که همه فیلد های ان خالی است مقدار null داره و زمانی که برنامه به این خط میرسد نمیتواند null رو با اعداد قبلی جمع کند و ارور میدهد

یکی از راه حل ها در نظر نگرفتن خانه اخر در حلقه است راه حل دیگه غیر فعال کردن allow add row گرید ویو است و . . . . .