PDA

View Full Version : سوال: چطور می توان چندین ردیف جدید را به DataGridView با سرعت بالا اضافه نمود؟



rasol_afkham
دوشنبه 10 آذر 1393, 18:14 عصر
با سلام خدمت دوستان عزیز:
در برنامه بر روی فرمم یک کنترل DataGridView دارم که 10 ستون دارد. حالا من آرایه ای از اطلاعات دارم و می خواهم آنها را در ردیفهای این کنترل قرار دهم. برای اینکار از کد های زیر استفاده نموده ام. (البته این کد ها برای مثال هستند، اما در برنامه هم به همین صورت استفاده نموده ام)
dgvPass.Rows.Add(10000);
for (int i = 0; i < 10000; i++)
{
dgvPass.Rows[i].Cells[0].Value = i;
dgvPass.Rows[i].Cells[1].Value = i;
dgvPass.Rows[i].Cells[2].Value = i;
dgvPass.Rows[i].Cells[3].Value = i;
dgvPass.Rows[i].Cells[4].Value = i;
dgvPass.Rows[i].Cells[5].Value = i;
dgvPass.Rows[i].Cells[6].Value = i;
dgvPass.Rows[i].Cells[7].Value = i;
dgvPass.Rows[i].Cells[8].Value = i;
dgvPass.Rows[i].Cells[9].Value = i;
}

مشکل من اینجاست که این کار با سرعت خیلی کندی انجام می شه. :عصبانی++:
آیا روش بهتری هست؟ :متفکر:
آیا من دارم اشتباه کدها را وارد می کنم؟ :متفکر:
لطفا اگه می دونید راهنمایی کنید. :تشویق:

hamid_hr
دوشنبه 10 آذر 1393, 18:27 عصر
for (int i = 0; i < 10000; i++) {
dgvPass.Rows.Add(i, i, i, i, i, i, i, i, i);
}

اینطوری سرعت بالاتر میره

hamid_hr
دوشنبه 10 آذر 1393, 18:32 عصر
dgvPass.Rows.Add(10000);
dgvPass.Rows.Cast<DataGridViewRow>().AsEnumerable()
.All(c =>
{
c.Cells[0].Value = c.Index;
c.Cells[1].Value = c.Index;
c.Cells[2].Value = c.Index;
c.Cells[3].Value = c.Index;
c.Cells[4].Value = c.Index;
c.Cells[5].Value = c.Index;
c.Cells[6].Value = c.Index;
c.Cells[7].Value = c.Index;
c.Cells[8].Value = c.Index;
return true;
});



اینطوری بهتر هم میشه

rasol_afkham
دوشنبه 10 آذر 1393, 18:58 عصر
روش اول خیلی بهتر بود

hamid_hr
دوشنبه 10 آذر 1393, 19:04 عصر
روش دوم سرعتش خیلی بیشتر هست
تقریبا 10 برابر سریعتر

rasol_afkham
دوشنبه 10 آذر 1393, 19:10 عصر
من نمی خواهم شماره اندیس خود دیتا گرید ویو رو داخل فیلداش بزارم. می خوام اطلاعاتم که در آرایه ای دیگر قرار دارند رو قرار بدم. برای همین هم کدها رو با آرایه مورد نظر امتحان کردم. روش اول خیلی سریع تر بود. در هر صورت متشکرم، کلی مشکلم حل شد.

مهرداد صفا
سه شنبه 11 آذر 1393, 16:08 عصر
با سلام.
با استفاده از دستور Select باید حاصل رو به صورت لیستی از anonymous type انتخاب کنید و به datagrid بایند کنید. به این شکل:

//ساخت آرایه
var array = Enumerable.Range(1, 10000).ToArray();
//بایند کردن
dataGridView1.DataSource = array.Select((i) => new { a = "a" + i.ToString(), b = "b" + i.ToString() }).ToArray();

rasol_afkham
سه شنبه 11 آذر 1393, 16:35 عصر
از نظر سرعت عمل فرقی نکرد، فقط دو تا ایراد داره اونهم اینه که


دیتا گرید ویوی من ستون هاش قبلا تعیین شده، با این روش اطلاعات در ستونهای جدید قرار می گیرند.
در ضمن من برای قرار دادن بعضی از اطلاعات باید از تابع استفاده کنم و وقتی تابع در کد قرار دادم خطا گرفت