PDA

View Full Version : سوال: نمایش اطلاعات فایل اکسل حجیم در دیناگرید ویو با روش db first entity framework



MoRTeZa`
دوشنبه 15 مرداد 1397, 19:10 عصر
با سلام
قصد داریم یک فایل اکسل حجیم که دارای بیش از سی هزار سطر هست رو در دیتاگرید ویو نمایش بدم
کد مربوطه رو نوشتم و فقط مشکل اینه که تمامی سطر رو ستونها رو یکباره وارد نمیکنه و سطر به سطر و ستون به ستون بصورت خطی وارد دیتاگرید ویو میکنه که هم باعث هنگ کردن برنامه میشه و هم خیلی زمان بر هست
قصد ما برای این کار این هست که پس از نمایش اطلاعات در صورت صحیح بودن دیتا تمامی این اطلاعات رو به دیتابیس منتقل کنیم که این قسمت هم انجام شده که سرعتش هم بالاست .

حالا آیا راهی هست که بشه این اطلاعات رو بصورت یکباره در دیتا گرید ویو نمایش بدیم ؟
یا اینکه
راهی هست که پس از انتخاب فایل اکسل مستقیم و بدون نمایش اطلاعات در دیتاگرید ویو تمام اطلاعات مستقیم وارد دیتابیس بشه ؟

روش bulk copy رو تست کردم تمام دیتاها بصورت علامت سوال درون دیتابیس نمایش داده میشه .. ( تبدیلها انجام شده ولی نتیجه مثبت نبوده )

ممنون میشم کمک کنید .

Mahmoud.Afrad
دوشنبه 15 مرداد 1397, 19:45 عصر
بایست کدتون را قرار بدید که مشخص بشه چطور اطلاعات را لود میکنید..

MoRTeZa`
سه شنبه 16 مرداد 1397, 07:33 صبح
با سلام
کد مربوط به btn کد زیر هست بطور کامل


private void btn_Select_Excel_Click(object sender, EventArgs e)
{
string fname = "";
OpenFileDialog fdlg = new OpenFileDialog();
fdlg.Title = "Excel File Dialog";
fdlg.Filter = "Excel Files |*.xlsx";
fdlg.RestoreDirectory = true;
if (fdlg.ShowDialog() == DialogResult.OK)
{
fname = fdlg.FileName;
}
else
{
FarsiMessage.Show("no select file .");
btn_Select_Excel.Enabled = true;
return;
}
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Workbook xlWorkbook = xlApp.Workbooks.Open(fname);
_Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Range xlRange = xlWorksheet.UsedRange;


int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;


dg_Import.ColumnCount = colCount;
dg_Import.RowCount = rowCount;


for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
//write the value to the Grid
if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null)
{
dg_Import.Rows[i - 1].Cells[j - 1].Value = xlRange.Cells[i, j].Value2.ToString();
}
}
//add useful things here!
}
}

Mahmoud.Afrad
دوشنبه 22 مرداد 1397, 09:55 صبح
به جای اینکه مستقیما داده را در دیتاگرید درج کنید، ابتدا یک دیتاتیبل یا یک لیست بسازید و پر کنید و در انتها به دیتاسورس دیتاگرید نسبت بدید. چون تعداد رکوردها زیاد هست قطعا لود اون در دیتاگرید زمانبر هست.
برای درج یا توسط یک حلقه سطرهای دیتاتیبلی که پر کردید را در دیتابیس درج کنید و یا از روش bulk copy استفاده کنید که سرعت بالاتری دارد.
اگر داده ها به درستی در دیتاگرید نمایش داده میشن ولی به صورت علامت سوال درج میشن کد قسمت درج در دیتابیس را قرار بدید.