PDA

View Full Version : خروجی تمامی رکوردهای دیتا گرید زمانی دیتا گرید صفحه بندی شده باشد



حسین.کاظمی
یک شنبه 12 بهمن 1393, 10:23 صبح
باسلام
اطلاعات جداول را با تکنولوژی ado.net وارد دیتا گرید کردم و یک کنترل هم برای صفحه بندی کردن صفحات گذاشتم و الان دیتا گریدم هر صفحه ایی 10تا رکورد را نشون میدهد تا اینجاش اوکی ولی ......
یک دکمه برای خروجی اطلاعات دیتا گرید به اکسل گذاشتم ولی فقط فقط همون صفحه جاری را استخراج میکنه؛ چطور میشه تمامی اطلاعات گرید را با توجه به صفحه بندی شدنشون به فایل اکسل استخراج کنم؟؟

و یا چطور میتونم همانند عکس زیر این خروجی ها را به کنترلی که قادر به صفحه بندی کردن گرید میکنه اضافه کنم




128082

باتشکر از همه

En_MK
یک شنبه 12 بهمن 1393, 14:19 عصر
شما همون datasetی که به گرید میدی همونو به اکسل پاس بده مطمئنا نباید مشکلی باشه

http://www.codeproject.com/Tips/375965/How-to-convert-GridView-data-to-Excel-PDF-Word-fil

حسین.کاظمی
سه شنبه 14 بهمن 1393, 13:52 عصر
دوستان من از تایع زیر برای خروجی اطلاعات دیتا گرید به اکسل استفاده می کنم
حالا دیتا گریدم صفحه بندی شده وقتی برای خروجی به اکسل از تابع فوق استفاده می کنم فقط همون صفحه اول گرید را تبدیل به اکسل میکنه

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


ممنونم



OleDbConnection con;
OleDbDataAdapter dap;
DataSet ds;
void Exporttoexcel(DataGridView dgv)
{
try
{
/*part1*/
System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");

/*part2*/
Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelbook = excelapp.Workbooks.Add(XlSheetType.xlWorksheet);
Microsoft.Office.Interop.Excel.Worksheet excelworksheet = (Worksheet)(excelbook.Worksheets[1]);
excelworksheet.DisplayRightToLeft = true;


/*part3*/
int ClmnCnt = dgv.Columns.Count;
int clmnrow = dgv.Rows.Count;
Range[] rng = new Range[ClmnCnt];

/*part4*/
for (int x = 0; x < ClmnCnt; x++)
{
string CellAddress = Convert.ToString(Convert.ToChar(Convert.ToByte(x + 65))) + "1";
rng[x] = excelworksheet.get_Range(CellAddress, CellAddress);
rng[x].Value2 = dgv.Columns[x].HeaderText;
}

/*part5*/
int j = 2;
foreach (DataRow r in ds.Tables[0].Rows)
{
for (int k = 0; k < ClmnCnt; k++)
{
string celladdress = Convert.ToString(Convert.ToChar(Convert.ToByte(k + 65))) + j.ToString();
rng[k] = excelworksheet.get_Range(celladdress, celladdress);
rng[k].Value2 = r[k].ToString();
}
j++;
}

/*part6*/
excelapp.Visible = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}


برای فراخوانی هم از دستور زیر استفاده می کنم


Exporttoexcel(dataGridView1);

Mahmoud Zaad
سه شنبه 14 بهمن 1393, 14:44 عصر
سلام
خب شما یه کوئری دیگه باید اجرا کنید و همه ی رکوردهای جدول رو بریزید مثلا توی یه دیتاتیبل بعد بفرستید به اکسل.
توی تابع هم به جای دیتاگریدویو، یه دیتاتیبل به عنوان ورودی معرفی کنید. تعداد سطر و ستون دیتاتیبل که مشخصه، اسم سر ستون (Header) ها رو هم توی کوئری می تونید تغییر بدید. مشکل چیه؟

حسین.کاظمی
پنج شنبه 16 بهمن 1393, 07:09 صبح
سلام
خب شما یه کوئری دیگه باید اجرا کنید و همه ی رکوردهای جدول رو بریزید مثلا توی یه دیتاتیبل بعد بفرستید به اکسل.
توی تابع هم به جای دیتاگریدویو، یه دیتاتیبل به عنوان ورودی معرفی کنید. تعداد سطر و ستون دیتاتیبل که مشخصه، اسم سر ستون (Header) ها رو هم توی کوئری می تونید تغییر بدید. مشکل چیه؟

سلام
ممنونت میشم نمونه کد بزاری واسم؟؟؟؟


تشکر

Mahmoud Zaad
پنج شنبه 16 بهمن 1393, 11:09 صبح
سلام
یه تغییراتی توی کد شما دادم، خوب تست نشده، شما توی همین کد بالا هم می تونید این تغییرات رو بدید بویژه part4 و part5

void Exporttoexcel(System.Data.DataTable dt)
{
try
{
/*part1*/
System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCultu re;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");

/*part2*/
Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelbook = excelapp.Workbooks.Add(XlSheetType.xlWorksheet);
Microsoft.Office.Interop.Excel.Worksheet excelworksheet = (Worksheet)(excelbook.Worksheets[1]);
excelworksheet.DisplayRightToLeft = true;


/*part3*/
int ClmnCnt = dt.Columns.Count;
int clmnrow = dt.Rows.Count;
Range[] rng = new Range[ClmnCnt];

//
for (int i = 1; i < dt.Columns.Count + 1; i++)
{
excelapp.Cells[1, i] = dt.Columns[i - 1].ColumnName;
}

//
for (int i = 0; i < dt.Rows.Count - 1; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
excelapp.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();
}
}

/*part6*/
//excelapp.Visible = true;

excelapp.ActiveWorkbook.SaveCopyAs("c:\\test.xlsx");
excelapp.ActiveWorkbook.Saved = true;
excelapp.Quit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

و موقع فراخوانی:

SqlDataAdapter da = new SqlDataAdapter("SELECT id AS [شناسه], person AS [نام شخص], phone AS [تلفن] FROM personal", cnn);
System.Data.DataTable dt1 = new System.Data.DataTable();
da.Fill(dt1);
Exporttoexcel(dt1);