PDA

View Full Version : سوال: خالی کردن Data grid view ؟



uness12
دوشنبه 06 آذر 1391, 17:53 عصر
سلام دوستان من میخوام دیتا گرید ویو ی زیر رو به وسیله یک کد فقط خالی کنم
95634
مانند شکل زیر:
95635

Y_Safaiee
دوشنبه 06 آذر 1391, 17:58 عصر
سلام دوست من



dataGridView1.Columns.Clear();


موفق باشی
بایت بایت

uness12
دوشنبه 06 آذر 1391, 18:14 عصر
ممنون از راهنماییت

Hajivandian
دوشنبه 06 آذر 1391, 21:28 عصر
سلام،

البته فکر میکنم اون کد ظاهرا دیتا گرید رو خالی میکنه! برای اینکه حافظه گرفته شده هم آزاد بشه کد زیر رو در ادامه اش بنویسید.

dataGridView1.Rows.Clear();

veniz2008
دوشنبه 06 آذر 1391, 22:26 عصر
سلام،

البته فکر میکنم اون کد ظاهرا دیتا گرید رو خالی میکنه! برای اینکه حافظه گرفته شده هم آزاد بشه کد زیر رو در ادامه اش بنویسید.

dataGridView1.Rows.Clear();
این کد موقع اجرا خطا میده، حتی درصورت اجرا شدن هم چندان منطقی به نظر نمیاد که حافظه اشغال شده رو برگردونه. چون تفاوت این کد با کدی که دوستمون یونس گذاشت در پاک کردن سطرهای گرید نسبت به ستون هست. یعنی گرید رو پاک میکنه ولی کاری رو بر روی حافظه انجام نمیده.

Hajivandian
سه شنبه 07 آذر 1391, 00:25 صبح
این کد موقع اجرا خطا میده، حتی درصورت اجرا شدن هم چندان منطقی به نظر نمیاد که حافظه اشغال شده رو برگردونه

بله حق با شما بود. بعد از حرف شما من یک سری تست هم انجام دادم؛ جالبه که در دو حالت حافظه رو آزاد نمیکنه! حتی با اینکه من روی منبع داده از متد Dispose استفاده کردم بازم حافظه رو برنگردوند!!

فایل تستی که انجام دادم رو ضمیمه میکنم. خوشحال میشم شما هم یه نگاهی بندازید و مشکل آزمایش من رو بگید.

RIG000
سه شنبه 07 آذر 1391, 03:17 صبح
روش این تست گرفتن چه شکلی هستش؟

samira3
سه شنبه 07 آذر 1391, 08:07 صبح
سلام
datagridview1.datasource=null;

Hajivandian
سه شنبه 07 آذر 1391, 09:16 صبح
سلام،


روش این تست گرفتن چه شکلی هستش؟
یه تیکه کد نوشتم که حافظه اشغال شده برنامه رو نشون میده و مرتب مقدارش رو رفرش میکنه. بعد اومدم هم به روش دوستمون آقای Youuness اجازه دادم دیتاگرید رو کاربر خالی کنه هم به روش خودم. در حین کار هم تو تمام لحظات دارم حافظه اشغالی رو رصد میکنم.


datagridview1.datasource=null;
نه به این صورت هم حافظه اشغالی برنمیگرده، لطفا کد ضمیمه رو دانلود کنید و ببنید میتونید اشکال تست رو پیدا کنید.

veniz2008
سه شنبه 07 آذر 1391, 12:20 عصر
من یک سری تست هم انجام دادم؛ جالبه که در دو حالت حافظه رو آزاد نمیکنه! حتی با اینکه من روی منبع داده از متد Dispose استفاده کردم بازم حافظه رو برنگردوند!!
یه مطلبی که هست اینه که شما روی گرید تمرکز کردید درصورتیکه این شی دیتاتیبل هست که داره رم رو مصرف میکنه (قبلا هم این مورد در سایت گفته شده که دیتاتیبل و دیتاست درون رم قرار میگیرن و به همین خاطر سرعت اجرای بالایی دارن).
برای بازگرداندن حافظه به سیستم، من ابتدا دیتاتیبل رو clear کردم و بعد از کلاس GC و از متد Collect اون برای گرفتن حافظه بدون مصرف، استفاده کردم ( نتیجه کار به اینصورت شد که تقریبا 90 درصد حافظه تخصیص داده شده، پس گرفته شد). در نهایت کد بصورت زیر میشه :


private void btnClearColumns_Click(object sender, EventArgs e)
{
dataSheet.Columns.Clear();
data.Clear();
GC.Collect();
MessageBox.Show("Columns Cleared.");
}

موفق باشی دوست عزیز.