PDA

View Full Version : جمع کردن محتویات یک ستون در datagridView



mustafa13
چهارشنبه 20 آبان 1388, 07:59 صبح
سلام
ضمن عرض تشکر از تمامی دوستان و دست اندرکاران
چطور می توان اعداد یکی از ستون های dataGridView را جمع بست
این امکان را هم می توان داد که فقط اعداد قبول کند
با تشکر

saeeedft
چهارشنبه 20 آبان 1388, 08:17 صبح
سلام دوست عزیز، شما اطلاعات دیتا گریر رو از کجا میگیرید(dataset یا datatable و یا...)، اول اینو مشخص کنید

mustafa13
چهارشنبه 20 آبان 1388, 08:24 صبح
سلام
دوست عزیز در چی اش فرق داره فکر نمی کنم فرقی داشته باشد چون که محتویات مقدار اش را می خواهم جمع کنیم
ولی من به صورت دستی می خواهم وارد کن

saeeedft
چهارشنبه 20 آبان 1388, 08:36 صبح
چرا فرق داره(البته موقع کد نویسی) شما اول باید تعداد سطرهای دیتا گرید رو بشماری، بعد طبق کد زیر ابتدا یک متغیر sum تعریف کنی، بعد از اون تا انتهای سطر های دیتا گرید متغیر sum رو با ستون مورد نظرتون جمع کنید :
int sum=0;
foreach(datarow dr in ds.table["tablename"].rows;
dr["ستون مورد نظر" ]+sumاین عملیات رو تبه اندازه تعداد سطرهای دیتا گرید انجام بدید

mustafa13
چهارشنبه 20 آبان 1388, 09:07 صبح
دوست عزیز من فقط یک datagridview را دارم که به هیچ بانک اطلاعاتی وصل نیست می خواهم به این صورت باشد که به محض وارد کردن اعداد در پایین ستون جمع اش را هم نشان بدهد و اگر غیر از اعداد هم وارد کرد خطا بگیرد
باتشکر

azadehsr
چهارشنبه 20 آبان 1388, 11:07 صبح
1- برای اینکار باید gridView را به یک DataTable بایند کنید که این کار ربطی به بانک اطلاعاتی ندارد. بعدش هر بار که با Datatable یک Row جدید اضافه می کنی از دستور زیر استفاده کن


decimal s=0;
object obj = ((DataTable)gvMain).Compute("Sum(Amount)",null);
if (obj != DBNull.Value)
{
s = (decimal)obj;
}


فرض کن Amount اسم ستون مورد نظرته

2-برای اینکه نشه غیر از عدد وارد بشه می تونی keydown رو handle کنی


if (!(e.KeyData >= Keys.D0 && e.KeyData <= Keys.D9) &&
!(e.KeyData >= Keys.NumPad0 && e.KeyData <= Keys.NumPad9))
e.SuppressKeyPress = true;

slashslash2009
چهارشنبه 20 آبان 1388, 11:37 صبح
double som;
for (int i = 0; i < dataGridViewX1.Rows.Count; i++)
{
som+= double.Parse(dataGridViewX1.Rows[i].Cells[7].Value.ToString());
}
textBox12.Text = som.ToString("#,#");
}

cell7 ستونی هست که می خوای جمع کنی

mustafa13
چهارشنبه 20 آبان 1388, 13:40 عصر
سلام
ضمن تشکر از دوست عزیز
یه مشکل کوچکی که داشت حل شد اصلاح شده اش این

private void button1_Click(object sender, EventArgs e)
{
double som = 0;
int hh = dataGridView1.Rows.Count;
for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{
som += double.Parse(dataGridView1.Rows[i].Cells[1].Value.ToString());
}
textBox1.Text = som.ToString("#,#");
}

اَرژنگ
چهارشنبه 20 آبان 1388, 14:11 عصر
سلام
ضمن تشکر از دوست عزیز
یه مشکل کوچکی که داشت حل شد اصلاح شده اش این

private void button1_Click(object sender, EventArgs e)
{
double som = 0;
int hh = dataGridView1.Rows.Count;
for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{
som += double.Parse(dataGridView1.Rows[i].Cells[1].Value.ToString());
}
textBox1.Text = som.ToString("#,#");
}


اشکال این روش این است که با داده‌هایی که داتگریدویو بایند شده کار نمیکنه.
اصل کار گرید نیست، گرید فقط برایه نمایشه، داده‌ها با داتا سورس بایند میشند.

اشکالی که اصلاح کردید به اصل قضیه ربطی ندارد.

captain_black81
چهارشنبه 20 آبان 1388, 14:32 عصر
فک کنم


for (int i = 0; i < dataGridView1.Rows.Count-1; i++)

مشکل داره
یعنی چون ایندکس سطرا از صفر شروع میشه ولی count از یک میشمره پس نباید منهای یک کنی
خود دانی

slashslash2009
چهارشنبه 20 آبان 1388, 15:06 عصر
روشی که من گفتم بیشتر به درد موقعی میخوره که خودمون دادها رو در گریدویو add کرده باشیم :


dataGridView1.Rows.Add(comboBox5.Text.Trim(), comboBox6.Text.Trim()

mustafa13
چهارشنبه 20 آبان 1388, 15:18 عصر
بله درست زماني كه داده هاي را به صورت دستي وارد مي كنيم همچون مشكلي را داره
متشكرم

mustafa13
چهارشنبه 20 آبان 1388, 15:21 عصر
1- برای اینکار باید gridView را به یک DataTable بایند کنید که این کار ربطی به بانک اطلاعاتی ندارد. بعدش هر بار که با Datatable یک Row جدید اضافه می کنی از دستور زیر استفاده کن


decimal s=0;
object obj = ((DataTable)gvMain).Compute("Sum(Amount)",null);
if (obj != DBNull.Value)
{
s = (decimal)obj;
}


فرض کن Amount اسم ستون مورد نظرته

2-برای اینکه نشه غیر از عدد وارد بشه می تونی keydown رو handle کنی


if (!(e.KeyData >= Keys.D0 && e.KeyData <= Keys.D9) &&
!(e.KeyData >= Keys.NumPad0 && e.KeyData <= Keys.NumPad9))
e.SuppressKeyPress = true;



دوست عزيز اين قسمت keydown جواب نداد تازه من فكر مي كنم كه اين براي كل datagride باشه ولي من براي يكي يا چند تا از ستون هاش مي خواهم كه وقت عدد قبول كنن از اين كه زحمت مي كشيد جواب مي دهيد متشكرم

captain_black81
پنج شنبه 21 آبان 1388, 17:16 عصر
میتونی وقتی cell update شد چکش کنی
اگه عدد بود که هیچی اگه نبود پاکش کنی

satmysat
پنج شنبه 28 شهریور 1392, 16:31 عصر
سلام دوستان منم یه چنین چیزی میخواستم فقط من اطلاعات دیتا گرید رو از پایگاه داده اکسس میگیرم و یه ستون دارم که به نام مبلغ میخواستم از اولین خونه ستون مبلغ جمع کنم تا آخرین خونه همین ستون اگر کمک کنید ممنون میشم و اینکه از اطلاعات بالا چیزی دستگیرم نشد متاسفانه

satmysat
پنج شنبه 28 شهریور 1392, 17:15 عصر
جواب ندادین خودم حلش کردم ::لبخند:

qweeqw
جمعه 18 تیر 1395, 17:53 عصر
جواب ندادین خودم حلش کردم ::لبخند:
سلام منم همین مشکل دارم میشه راهنمای کنید