افزودن تصاویر به گریدویو از داخل پوشه
	
	
		سلام و وقت بخیر دوستان چطوری عکسهایی که داخل یک پوشه در یکی از درایوهای سیستم ذخیره شده را داخل گریدویو نمایش بدهم با تشکر و سپاس
	 
	
	
	
		نقل قول: افزودن تصاویر به گریدویو از داخل پوشه
	
	
		
	نقل قول:
	
		
		
			
				نوشته شده توسط 
safari_m4
				
			 
			سلام و وقت بخیر دوستان چطوری عکسهایی که داخل یک پوشه در یکی از درایوهای سیستم ذخیره شده را داخل گریدویو نمایش بدهم با تشکر و سپاس
			
		
	 
 // مسیر پوشه حاوی تصاویر
string folderPath = @"C:\MyImagesFolder";
// لیستی از فایلهای موجود در پوشه
List<string> imageFiles = Directory.GetFiles(folderPath).ToList();
// ساخت دیتاسورس گریدویو
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Image", typeof(Image));
// برای هر فایل تصویری در لیست، تصویر را بخوانید و به دیتاتیبل اضافه کنید
foreach (string imagePath in imageFiles)
{
    Image image = Image.FromFile(imagePath);
    dataTable.Rows.Add(image);
}
// ست کردن دیتاتیبل به گریدویو
dataGridView1.DataSource = dataTable;
// ست کردن سایز ستون تصاویر به مقدار ثابت
dataGridView1.Columns[0].Width = 100;
در این کد، ابتدا مسیر پوشه حاوی تصاویر را تعیین کرده و سپس با استفاده از Directory.GetFiles، همه فایلهای تصویری موجود در پوشه را برمیگردانیم. سپس برای هر فایل تصویری در لیست، تصویر را با استفاده از Image.FromFile بخوانید و به دیتاتیبل اضافه کنید. در نهایت، دیتاتیبل را به گریدویو ست کرده و سایز ستون تصاویر را به مقدار ثابت تنظیم میکنیم.
	 
	
	
	
		نقل قول: افزودن تصاویر به گریدویو از داخل پوشه
	
	
		
	نقل قول:
	
		
		
			
				نوشته شده توسط 
پرستو پارسایی
				
			 
			// مسیر پوشه حاوی تصاویر
string folderPath = @"C:\MyImagesFolder";
// لیستی از فایلهای موجود در پوشه
List<string> imageFiles = Directory.GetFiles(folderPath).ToList();
// ساخت دیتاسورس گریدویو
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Image", typeof(Image));
// برای هر فایل تصویری در لیست، تصویر را بخوانید و به دیتاتیبل اضافه کنید
foreach (string imagePath in imageFiles)
{
    Image image = Image.FromFile(imagePath);
    dataTable.Rows.Add(image);
}
// ست کردن دیتاتیبل به گریدویو
dataGridView1.DataSource = dataTable;
// ست کردن سایز ستون تصاویر به مقدار ثابت
dataGridView1.Columns[0].Width = 100;
در این کد، ابتدا مسیر پوشه حاوی تصاویر را تعیین کرده و سپس با استفاده از Directory.GetFiles، همه فایلهای تصویری موجود در پوشه را برمیگردانیم. سپس برای هر فایل تصویری در لیست، تصویر را با استفاده از Image.FromFile بخوانید و به دیتاتیبل اضافه کنید. در نهایت، دیتاتیبل را به گریدویو ست کرده و سایز ستون تصاویر را به مقدار ثابت تنظیم میکنیم.
 
			
		
	 
 
البته چند نکته در خصوص این پاسخ کامل هست که استفاده کننده باید در نظر بگیره : 
اگر مشخص میشد شما از دات نت کور استفاده میکنین یا دات نت فریمورک خیلی بهتر بود.
1- Directory.GetFiles اگر به فایل یا پوشه ای بر بخوره که شما بهش دسترسی ندارین فورا خطا میده و چون این خطا داخلی هست شما نمیتونین Ignore کنین ، مگر اینگه یه جورایی تابع GetFiles رو خودتون بنویسین، البته این موضوع مربوط به دات نت فریم ورک هست ، در خصوص دانت نت کور این تابع مدیریت خطاهاش بهبود پیدا کرده.
2-اگر تعداد پوشه ها و فایل های شما زیاد باشه ، که در یک پروژه پلاکخوانی برای من 1.5 ترابایت بود ! کاربر شما باید دقیقه ها و گاها ساعت ها برای Iterate کردن و پیمایش صبر کنه و در این حالت نرم افزار شما قطعا کرش میکنه ، راه حل اصولیش اینه که شما همین تابع رو به صورت async/await استفاده کنین که به صورت پیشفرض به دلیل نامعلومی در دانت تعبیه نشده ! و باید خودتون بنویسیدش ، زیاد پیچیده نیست ولی با توجه به اینکه شما در ترد UI هم فعالیت دارین حتما خطای Cross-Thread میگیرین که مدیریتش کمی پیچیده میشه.
یه راه حل جایگزین استفاده از توابعی هست که اصطلاحا yield هستند و همون لحظه که فایل رو پیمایش کردند نتیجه رو بدون از دست دادن context به شما برمیگردونن.
    foreach (string file in Directory.EnumerateFiles(@"D:", "*.cs", SearchOption.AllDirectories)) 
            {
                Console.WriteLine(file);
                // Or whatever you want to do with damn file !
            }
توضیحات : توجه کنین به جای GetFiles از EnumerateFiles استفاده شده و در آخر دیگه ()ToList نباید داشته باشه و در اینجا دیگه ما همه فایل ها رو نمیگیرم کپی کنیم توی لیست و بعد پیمایش کنین ، همون لحظه در حلقه هر کاری داریم انجام میدیم.
	 
	
	
	
		نقل قول: افزودن تصاویر به گریدویو از داخل پوشه
	
	
		
	نقل قول:
	
		
		
			
				نوشته شده توسط 
ShayanFiroozi
				
			 
			البته چند نکته در خصوص این پاسخ کامل هست که استفاده کننده باید در نظر بگیره : 
اگر مشخص میشد شما از دات نت کور استفاده میکنین یا دات نت فریمورک خیلی بهتر بود.
1- Directory.GetFiles اگر به فایل یا پوشه ای بر بخوره که شما بهش دسترسی ندارین فورا خطا میده و چون این خطا داخلی هست شما نمیتونین Ignore کنین ، مگر اینگه یه جورایی تابع GetFiles رو خودتون بنویسین، البته این موضوع مربوط به دات نت فریم ورک هست ، در خصوص دانت نت کور این تابع مدیریت خطاهاش بهبود پیدا کرده.
2-اگر تعداد پوشه ها و فایل های شما زیاد باشه ، که در یک پروژه پلاکخوانی برای من 1.5 ترابایت بود ! کاربر شما باید دقیقه ها و گاها ساعت ها برای Iterate کردن و پیمایش صبر کنه و در این حالت نرم افزار شما قطعا کرش میکنه ، راه حل اصولیش اینه که شما همین تابع رو به صورت async/await استفاده کنین که به صورت پیشفرض به دلیل نامعلومی در دانت تعبیه نشده ! و باید خودتون بنویسیدش ، زیاد پیچیده نیست ولی با توجه به اینکه شما در ترد UI هم فعالیت دارین حتما خطای Cross-Thread میگیرین که مدیریتش کمی پیچیده میشه.
یه راه حل جایگزین استقاده از توابعی هست که اصطلاحا 
yield هستند و همون لحظه که فایل رو پیمایش کردند نتیجه رو بدون از دست دادن 
context به شما برمیگردونن.
    foreach (string file in Directory.EnumerateFiles(@"D:", "*.cs", SearchOption.AllDirectories)) 
            {
                Console.WriteLine(file);
                // Or whatever you want to do with damn file !
            }
توضیحات : توجه کنین به جای 
GetFiles از 
EnumerateFiles استفاده شده و در آخر دیگه 
()ToList نباید داشته باشه و در اینجا دیگه ما همه فایل ها رو نمیگیرم کپی کنیم توی لیست و بعد پیمایش کنین ، همون لحظه در حلقه هر کاری داریم انجام میدیم.
 
			
		
	 
 از دات نت فریمورک استفاده می کنم
تشکر و سپاس از بذل توجه و پاسختان ممنون