در این نوشته می خواهیم چگونگی بارگذاری یک فایل CSV در یک DataGridView را به شما آموزش دهیم. انگیزه از این نوشته آناست که، می خواهیم شما با DataGridView و چگونگی هم کنشی (تعامل) با آن و بارگذاری کردن داده ها در فیلدها و سطرهای آن آشنا شوید. همچنین این نوشته، پیش نیازی برای نوشته های دیگر در همین دوره است، زیرا در این دوره بسیار با DataGridView کار خواهیم کرد.

پروژه ساده Entity Framework و WinForms برای CRUD – بخش یکم

برای گام نخست، باید یک پروژه Windows Form بسازید که دارای چهار مولفه گرافیکی است. نخست یک DataGridView که آن را برای نمایش دادن درون مایه (محتوای) فایل CSV به کار می بریم. زمانی که دگمه ای به نام Load File کلیک می شود،پس باید یک Dialog نشان داده شود تا شما بتوانید فایلی را از سیستم فایل برگزینید (انتخاب کنید) و سپس این فایل در DataGridView نمایش داده شود. دگمه دیگری به نام Clear داریم که با کلیک روی آن، همه درون مایه (محتوای) DataGridView پاک می شود. همچنین تابع دیگری به نام PopulateDataGridView داریم که داده های DataGridView را نمایش می دهد. بنابراین:

  • در فرم نیاز به یک DataGridView داریم که نام شی آن را showCsvDgv می نامیم.
  • در فرم دو کلید به نام های Load File و Clear داریم که به ترتیب نام شی آنها را loadBtn و ClearBtn می نامیم.
  • یگ برچسب (Label) داریم که تعداد سطرها و ستون های فایل CSV 

اداره کردن رویداد Click دگمه Load File

شکل زیر نمای فرم و المان های درونی آن که در برگیرنده یک DataGridView، دو Button و یک Label است را نشان می دهد. می خواهیم زمانی که روی دگمه Load File کلیک کردیم، یک OpenFileDialogکلیک (Click) این دگمه را ساخته و کدهای آن را بنویسیم. بنابراین روی دگمه Load File دو بار کلیک کنید تا وارد برگه کد شده و خواهید دید که تابعی به نام LoadBtn_Click ساخته می شود. کدهای زیر، درون مایه (محتوای) آن را نشان می دهد.

در بند (خط) سوم نمونه ای از کلاس نمونه ای از کلاس OpenFileDialog می سازیم و سپس مقدار ویژگی Filter آن را تنها برای فایل های فرمت CSV مقداردهی می کنیم به گونه ای که تنها فایل های با فرمت CSV نشان داده شود. سپس باید OpenFileDialog نشان داده شود، پس متد ()ShowDialog فراخوانی می شود. حال که Dialog نشان داده شده، پس باید از یک مسیر دلخواه، فایل دلخواه را برگزینید. پس از Ok کردن، مسیر این فایل در متغیر رشته ای به نام filename ریخته می شود. همچنین کد زیر نمونه دیگری از مقداردهی کردن ویژگی Filter را نشان می دهد که در آن تنها فایل های CSV و XML نشان داده می شوند.

در سه بَند پایانی، نخست یک متغیر از گونه DataTable ساخته ایم و سپس خروجی متد ()PraseCSV را در آن ریخته ایم، بنابراین مقدار برگشتی متد ()PraseCSV از گونه DataTable است. تا بدین جا متغیری به نام data از گونه DataTable داریم که محتوای سطرهای CSV خواندن شده به کمک متد ()PraseCSV در آن نگهداری می شوند. اکنون باید این متغیر را به ویژگی DataSource از DataGridView انتساب دهیم، تا همانند شکل زیر سطرهای فایل CSV نمایش داده شوند. سپس با کمک ویژگی های Rows.Count شمارگان (تعداد) سطرهایی که درون متغیر data از گونه DataTable نگهداری می شودد را در برچسب نمایش می دهیم، بنابراین مقدار برگشتی ()data.Rows.Count.ToString به ویژگی Text از Label انتساب داده می شود.

خواندن فایل های CSV

توجه کنید که فایل CSV شاید به گونه سر راست با پایگاه داده ا و Entity Framework پیوستگی (ارتباطی) نداشته باشد ولی یکی از برجسته ترین فایل هایی هستند که شما با آن سر و کار خواهید داشت. همچنین در چون ساختاری همسان با جدول ها دارند، پس می توانیم پیش از بارگذاری جدول های پایگاه داده، با کمک فایل های CSV، چگونگی هم کنشی (تعامل) با DataGridView در Windows Form را آموزش دهیم. همچنین در نوشته های پیش رو، چگونگی واکشی داده های جدول پایگاه داده و بارگذاری آنها در فایل CSV را آموزش می دهیم.

کد های زیر متد ()ParseCSV را نشان می دهند که یک ورودی به نام filename از گونه رشته را دریافت و یک خروجی از گونه DataTable را بر می گرداند. در آغاز به کمک StreamReader فایل ورودی که ههمان مقدار برگشتی Dialog است را می خواند و متغیر reader از این پس به این فایل اشاره می کند. سپس در عبارت using دیگر و به کمک متد CsvReader از فریم ورک CsvHelper، همه فایل CSV خوانده می شود. سپس بازهم در عبارت using دیگری، و این بار به کمک متد ()CsvDataReader همه خط های فایل CSV در متغیر dr ریخته می شوند. dr متغیری از گونه DataRow است و هر DataTable می تواند یک یا چندین DataRow داشته باشد، پس در دنباله متغیر dt ازگونه DataTable ساخته شده و سپس همه درون مایه (محتوای) dr به کمک متد()Load از کلاس DataRow به درون متغیر dt بارگذاری می شوند.

پاک کردن DataSource

گفتیم که کلیدی به نام Clear داریم که با آن درون مایه (محتوای) DataGridView پاک می شود. پیش از هر چیز دو بار روی دگمه Clear کلیک کنید تا وارد رویداد ClearBtn_Click شوید. برای پاک سازی DataGridView، نوشتن کد زیر در متد ()ClearBtn_Click است که با آن مقدار رشته تهی (خالی) را به DataSource می دهیم. همچنین می تواند به جاری رشته تهی، مقدار پوچ یا null را به این گونه datagridview.DataSource = null جایگزین کد زیر در تابع کنید.

DataSource چیست

DataSource ویژگی از کلاس DataGridView است که منبع داده ای که باید در DataGridView نشان داده شوند را دریافت می کند. بنابراین برای نمایش داده ها، باید DataSource را با منبع داده دلخواه مقداردهی کنیم. این منبع در اینجا یک فایل CSV بود که سطرهای آن به DataRow ها تبدیل شدند و سپس این DataRow ها به کمک متد ()Load از کلاس DataRow به متغیری از گونه DataTable بار گذاری شدند و سپس همین DataTable به عنون منبع داده، به ویژگی DataSource انتساب داده شد.

در نوشته های پسین نشان داده ایم که منبع DataSource می تواند سطرهای جدول های پایگاه داده باشند که یا به کمک ADO.NET و یا به کمک Entity Framework واکشی شده اند. در نوشته پسین چگونگی هم کنشی (تعامل) با پایگاه داده اوراکل و ADO.NET و بازهم کمک گیری از DataRow و DataTable برای نمایش سطرها در DataGridView را نشان داده ایم.