PDA

View Full Version : حرفه ای: خروجی excelاز gridview



soha_smb
سه شنبه 06 اسفند 1392, 23:29 عصر
با سلام
من وقتی که از گریدم خروجی اکسل میگیرم بعضی وقتها حروف فارسی رو درست نشون میده و بعضی وقتها هم حروف رو به صورت ناخوانا(بدون utf-8) نشون میده(اینجوری نمایش روز هفته) نمیدونم مشکل از گجاست.
ممنون میشم راهنمایی کنید.

protected void btnsearch(object sender, EventArgs e)
{
try
{
string SP_Name = _Reports.Get_SP_CreateReport(drd_tablename.Selecte dValue);
string columnlist = GetSelectedRoleNameString();
SqlConnection con = new SqlConnection(DAL.ConnectionString);
SqlCommand cmd = new SqlCommand(SP_Name, con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@columnlist", columnlist);
con.Open();

SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
GridView1.DataSource = dt;
GridView1.DataBind();
con.Close();

Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "";
Response.ContentType = "application/ms-excel.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
catch (Exception ex)
{

}


روال کار به این شکله که من میام تو برنامه کوئری رو مینویسم بعد اونو
ارسال میکنم به پروسیجر و مقادیر دریافتی از sql رو bind میکنم به gridview
بعد ازش خروجی اکسل می گیرم.

یادآوری 1:داده ها داخل دیتابیس درست نمایش داده می شن.

2یاداوری2: فیلدهای جدول دیتابیس از انواع مختلفی است nvarchar,varchar,int,bit,ntex,datetime}

mehrzad_ali
سه شنبه 06 اسفند 1392, 23:40 عصر
اینو تست کن


private void Excel_Export()
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition",
"attachment;filename=GridViewExport.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.DataBind();
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridViewRow row = GridView1.Rows[i];
//Apply text style to each Row
row.Attributes.Add("class", "textmode");
}
GridView1.RenderControl(hw);

//style to format numbers to string
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}




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



public override void VerifyRenderingInServerForm(Control control)
{
/* Verifies that the control is rendered */
}


گرید رو هم بایند کن

protected void Page_Load(object sender, EventArgs e)
{
showGrid();
}

public void showGrid()
{

DataTable dt = dataAccessLayer.Select("select *from product");
GridView1.DataSource = dt;
GridView1.DataBind();

}