چگونگی ارسال یک Datatable به CSV (Comma Separated File) با استفاده از متد Extension را برای شما توضیح دهم.
فایل های CSV چه فایل هایی می باشند؟
فایلی است که همه ی مقادیر آن با کاما (,) از هم جدا شده اند.که این فایل شامل داده هایی با همه ی ستون ها خواهد شد.
استفاده دیگر از فایل CSV ،این است که مستقیما فایل را در اکسل باز می کند و سپس داده ها به صورت اتوماتیک در خانه های اکسل پر خواهند شد.
1- ابتدا یک Datatble در برنامه ایجاد کرده ایم :
DataTable Dt = new DataTable();
//Columns
Dt.Columns.Add("ID", typeof(int));
Dt.Columns.Add("First Name", typeof(string));
Dt.Columns.Add("City", typeof(string));
//Data
Dt.Rows.Add(1, "Mohsen", "Bojnourd");
Dt.Rows.Add(2, "Mostafa", "Tehran");
Dt.Rows.Add(3, "Fahime", "Bojnourd");
Dt.Rows.Add(4, "Narges", "Kerman");
Dt.Rows.Add(5, "Maryam", "Shiraz");
Dt.Rows.Add(6, "Farzad", "Mashhad");
2- برای نمایش به کاربر از یک DataGrid در حالت نمایش فرم استفاده کرده ایم.
3- ساخت متد Extension برای تبدیل Datatable به CSV
3-1 ابتدا یک کلاس ایجاد میکنیم
public static class CSVUtlity
{
}
3-2 اضافه کردن متد Extension
public static void ToCSV(this DataTable dtDataTable, string strFilePath)
{
}
3-3 حال میریم به سراغ کدهای مربوط به Extension که ساختیم با نام ToCSV
public static void ToCSV(this DataTable dtDataTable, string strFilePath)
{
StreamWriter sw = new StreamWriter(strFilePath, false);
//headers
for (int i = 0; i < dtDataTable.Columns.Count; i++)
{
sw.Write(dtDataTable.Columns[i]);
if (i < dtDataTable.Columns.Count - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
foreach (DataRow dr in dtDataTable.Rows)
{
for (int i = 0; i < dtDataTable.Columns.Count; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
string value = dr[i].ToString();
if (value.Contains(','))
{
value = String.Format("\"{0}\"", value);
sw.Write(value);
}
else
{
sw.Write(dr[i].ToString());
}
}
if (i < dtDataTable.Columns.Count - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
}
sw.Close();
}
4- حال در برنامه یک Button قرار میدهیم که با Click بر آن عمل تبدیل را انجام بدهد
private void BtnExportCSV_Click(object sender, EventArgs e)
{
string filename = SavefileDialog();
Dt.ToCSV(filename);
}
4-1 Dt.ToCSVمتد ToCSV را که در کلاس CSVutlity قرار دارد را صدا می زند.
4-2 SavefileDialog نام کلاسی می باشد که برای باز کردن پنجره SaveFileDialog از آن استفاده کرده ایم کدهای آن
private string SavefileDialog()
{
string Filename = null;
SaveFileDialog saveFileDialog = new SaveFileDialog();
//saveFileDialog.Filter = "Excel|*.xls";
saveFileDialog.Filter = "csv File|*.csv";
saveFileDialog.Title = "Save Report";
DialogResult dialogResult = saveFileDialog.ShowDialog();
if (dialogResult == DialogResult.OK)
Filename = saveFileDialog.FileName;
return Filename;
}
اگر اگر اطلاعات DataTable فارسی باشند موقع تبدیل به CSV بصورت فارسی نمایش داده نمیشوند
اگر راهنمایی کنید ممنون میشم