نیکناز
سه شنبه 12 دی 1391, 13:55 عصر
سلام
من یه دیتابیس با 50 هزار رکورد دارم
یه فرم دارم که یه سری قابلیت های سرچ براش در نظر گرفتم.
خروجی این فیلترها معمولا 10 تا 30 هزار رکورد هست که تو دیتاگرید نمایش میده و من میخوام از دیتاگرید خروجی اکسل بگیرم
من یه سری کد از نت سرچ کردم در واقع تمام کدها شبیه هم بود و یه زمان طولانی برای خروجی صرف میکرد
من کدی میخوام که سرعت خروجی بالاتر بره
لطفا راهنمایی کنید
ممنونم
سیستمی که نرم افزار روش نصبه سیستم بدی نیست 2 گیگ رم داره
public void OutPutExcel(DataGridView dgv)
{
SaveFileDialog objSaveFileDialog = new SaveFileDialog();
objSaveFileDialog.Filter = "Excel files(*.xls;*.xlsx)|*.xls;*.xlsx";
objSaveFileDialog.ShowDialog();
if (objSaveFileDialog.FileName != "")
{
System.Globalization.CultureInfo oldci = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-us");
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
app.Visible = true;
worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workboo k.Sheets["Sheet1"];
worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workboo k.ActiveSheet;
worksheet.Name = "bonyad";
DataTable dtGridData = new DataTable();
//dtGridData = (DataTable)_dgv_information_person.DataSource;
DataRow dtRow;
try
{
foreach (DataGridViewColumn col in dgv.Columns) // dgvData is the name of the gridView
dtGridData.Columns.Add(col.DataPropertyName);
foreach (DataGridViewRow gridRow in dgv.Rows)
{
if (gridRow.IsNewRow)
continue;
dtRow = dtGridData.NewRow();
for (int i1 = 0; i1 < dgv.Columns.Count; i1++)
dtRow[i1] = (gridRow.Cells[i1].Value == null ? null : gridRow.Cells[i1].Value);
dtGridData.Rows.Add(dtRow);
}
}
catch (Exception)
{ }
for (int h = 1; h < dgv.Columns.Count + 1; h++)
{
worksheet.Cells[1, h] = dgv.Columns[h - 1].HeaderText;
}
//worksheet.Cells[1, 1] = "A".ToString(); // header text in excel based on your need
//worksheet.Cells[1, 2] = "B".ToString(); // header text in excel based on your need
//worksheet.Cells[1, 3] = "C".ToString(); // header text in excel based on your need
for (int i = 0; i < dtGridData.Rows.Count; i++)
{
for (int j = 0; j < dtGridData.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = dtGridData.Rows[i][j].ToString();
}
}
//for (int i = 0; i < dgv.Rows.Count; i++)
//{
// DataGridViewRow row = dgv.Rows[i];
// for (int j = 0; j < row.Cells.Count; j++)
// {
// worksheet.Cells[i + 1, j + 1] = row.Cells[j].Value.ToString();
// }
//}
//
worksheet.Rows.Font.Size = 9;
worksheet.Rows.Font.Name = "tahoma";
//
workbook.SaveAs(objSaveFileDialog.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWork bookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode. xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
app.Quit();
}
}
من یه دیتابیس با 50 هزار رکورد دارم
یه فرم دارم که یه سری قابلیت های سرچ براش در نظر گرفتم.
خروجی این فیلترها معمولا 10 تا 30 هزار رکورد هست که تو دیتاگرید نمایش میده و من میخوام از دیتاگرید خروجی اکسل بگیرم
من یه سری کد از نت سرچ کردم در واقع تمام کدها شبیه هم بود و یه زمان طولانی برای خروجی صرف میکرد
من کدی میخوام که سرعت خروجی بالاتر بره
لطفا راهنمایی کنید
ممنونم
سیستمی که نرم افزار روش نصبه سیستم بدی نیست 2 گیگ رم داره
public void OutPutExcel(DataGridView dgv)
{
SaveFileDialog objSaveFileDialog = new SaveFileDialog();
objSaveFileDialog.Filter = "Excel files(*.xls;*.xlsx)|*.xls;*.xlsx";
objSaveFileDialog.ShowDialog();
if (objSaveFileDialog.FileName != "")
{
System.Globalization.CultureInfo oldci = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-us");
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
app.Visible = true;
worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workboo k.Sheets["Sheet1"];
worksheet = (Microsoft.Office.Interop.Excel._Worksheet)workboo k.ActiveSheet;
worksheet.Name = "bonyad";
DataTable dtGridData = new DataTable();
//dtGridData = (DataTable)_dgv_information_person.DataSource;
DataRow dtRow;
try
{
foreach (DataGridViewColumn col in dgv.Columns) // dgvData is the name of the gridView
dtGridData.Columns.Add(col.DataPropertyName);
foreach (DataGridViewRow gridRow in dgv.Rows)
{
if (gridRow.IsNewRow)
continue;
dtRow = dtGridData.NewRow();
for (int i1 = 0; i1 < dgv.Columns.Count; i1++)
dtRow[i1] = (gridRow.Cells[i1].Value == null ? null : gridRow.Cells[i1].Value);
dtGridData.Rows.Add(dtRow);
}
}
catch (Exception)
{ }
for (int h = 1; h < dgv.Columns.Count + 1; h++)
{
worksheet.Cells[1, h] = dgv.Columns[h - 1].HeaderText;
}
//worksheet.Cells[1, 1] = "A".ToString(); // header text in excel based on your need
//worksheet.Cells[1, 2] = "B".ToString(); // header text in excel based on your need
//worksheet.Cells[1, 3] = "C".ToString(); // header text in excel based on your need
for (int i = 0; i < dtGridData.Rows.Count; i++)
{
for (int j = 0; j < dtGridData.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = dtGridData.Rows[i][j].ToString();
}
}
//for (int i = 0; i < dgv.Rows.Count; i++)
//{
// DataGridViewRow row = dgv.Rows[i];
// for (int j = 0; j < row.Cells.Count; j++)
// {
// worksheet.Cells[i + 1, j + 1] = row.Cells[j].Value.ToString();
// }
//}
//
worksheet.Rows.Font.Size = 9;
worksheet.Rows.Font.Name = "tahoma";
//
workbook.SaveAs(objSaveFileDialog.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWork bookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode. xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
app.Quit();
}
}