سلام.
نام ستون نام کالا رو "nam" و نام ستون تعداد رو "tedad" در نظر گرفتم.
1- مقادیر نامهای یکسان با هم جمع شده.
2- منبع داده دیتاگرید ویو برابر با null قرار گرفته.
3- ستونهای دیتا گرید ویو حذف شده.
4- دو ستون جدید برای نام و تعداد در نظر گرفته شده.
5- دیتا گرید ویو مقدار دهی شده.
برای این کد از دیکشنری استفاده شده.
میتونید از این لینک اطلاعاتی راجبش بدست بیارید
http://www.w3-farsi.com/ساخت-دیکشنری/
ویدئو:
http://www.aparat.com/v/tvqbr/قسمت_پنجاهم%3A_کالکشن_های_جنریک،_Dictionary
private void button1_Click(object sender, EventArgs e)
{
Dictionary<string, Int32> dictionery = new Dictionary<string, Int32>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
string name = row.Cells["nam"].Value.ToString();
bool result = dictionery.ContainsKey(name);
if (result == false)
dictionery.Add(name, Convert.ToInt32(row.Cells["tedad"].Value));
else
dictionery[name] += Convert.ToInt32(row.Cells["tedad"].Value);
}
dataGridView1.DataSource = null;
dataGridView1.Columns.Clear();
dataGridView1.Columns.Add("nam", "نام");
dataGridView1.Columns.Add("tedad", "تعداد");
foreach (KeyValuePair<string, int> item in dictionery)
{
dataGridView1.Rows.Add(item.Key, item.Value.ToString());
}
}
کارایی کد رو تست کنید ببینید تا چه تعداد رکورد خوب جواب میده من تا 80000 امتحان کردم و خوب بود.
اگر کد بهینه تری نیاز بود بگید تا قرار بدم.
پیشنهاد میدم از اس کیو ال سرور استفاده کنید سرعت بالایی داره.
شما میتونید با این کوئری به راحتی و سرعت بالا کاری رو که مد نظرتون است انجام بدید و برنامتون بهتر میشه:
SELECT Name, SUM(tedad) AS tedad
FROM table_name
GROUP BY Name;
Name => ستون نام کالا.
tedad => ستون تعداد کالا.
table_name => نام جدول.