2012-11-26 3 views
0

DataGrid (Asp.net 및 Sqlserver2008)에서 표시, 삽입, 업데이트, 삭제하려는 다음 Excel에서 DataGrid로 데이터를 내보내고 싶습니다. Table Structure이미지없이 DataGrid에서 데이터를 내보내려면 어떻게해야합니까?

Default.aspx를

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>'A'</title> 
    <style type="text`/css">` 
    .Gridview 
     { 
      font-family: Verdana; 
      font-size: 10pt; 
      font-weight: normal; 
      color: black; 
     } 
    </style> 

    <script type="text/javascript"> 
     function ConfirmationBox(username) { 

      var result = confirm('Are you sure you want to delete ' + username + ' Details?'); 
      if (result) { 

       return true; 
      } 
      else { 
       return false; 
      } 
     } 
    </script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="gvDetails" DataKeyNames="UserId,UserName" runat="server" AutoGenerateColumns="false" 
      CssClass="Gridview" HeaderStyle-BackColor="#61A6F8" ShowFooter="true" HeaderStyle-Font-Bold="true" 
      HeaderStyle-ForeColor="White" OnRowCancelingEdit="gvDetails_RowCancelingEdit" 
      OnRowDeleting="gvDetails_RowDeleting" OnRowEditing="gvDetails_RowEditing" 
      OnRowUpdating="gvDetails_RowUpdating" 
      OnRowCommand="gvDetails_RowCommand" Height="275px" Width="530px"> 
      <Columns> 
       <asp:TemplateField> 
        <EditItemTemplate> 
         <asp:ImageButton ID="imgbtnUpdate" CommandName="Update" runat="server" 
          ImageUrl="~/Images/update.jpg" ToolTip="Update" Height="20px" Width="20px" /> 
         <asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" 
          ImageUrl="~/Images/Cancel.jpg" ToolTip="Cancel" Height="20px" Width="20px" /> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:ImageButton ID="imgbtnEdit" CommandName="Edit" runat="server" 
          ImageUrl="~/Images/Edit.jpg" ToolTip="Edit" Height="20px" Width="20px" /> 
         <asp:ImageButton ID="imgbtnDelete" CommandName="Delete" runat="server" 
          ImageUrl="~/Images/delete.jpg" ToolTip="Delete" Height="20px" Width="20px" /> 
        </ItemTemplate> 
        <FooterTemplate> 
         <asp:ImageButton ID="imgbtnAdd" runat="server" ImageUrl="~/Images/AddNewitem.jpg" 
          CommandName="AddNew" Width="30px" Height="30px" ToolTip="Add new User" ValidationGroup="validaiton" /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="UserName"> 
        <EditItemTemplate> 
         <asp:Label ID="lbleditusr" runat="server" Text='<%#Eval("Username") %>' /> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lblitemUsr" runat="server" Text='<%#Eval("UserName") %>' /> 
        </ItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="txtftrusrname" runat="server" /> 
         <asp:RequiredFieldValidator ID="rfvusername" runat="server" ControlToValidate="txtftrusrname" 
          Text="*" ValidationGroup="validaiton" /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="City"> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtcity" runat="server" Text='<%#Eval("City") %>' /> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lblcity" runat="server" Text='<%#Eval("City") %>' /> 
        </ItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="txtftrcity" runat="server" /> 
         <asp:RequiredFieldValidator ID="rfvcity" runat="server" ControlToValidate="txtftrcity" 
          Text="*" ValidationGroup="validaiton" /> 
        </FooterTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Designation"> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtstate" runat="server" Text='<%#Eval("Designation") %>' /> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="lblstate" runat="server" Text='<%#Eval("Designation") %>' /> 
        </ItemTemplate> 
        <FooterTemplate> 
         <asp:TextBox ID="txtftrDesignation" runat="server" /> 
         <asp:RequiredFieldValidator ID="rfvdesignation" runat="server" ControlToValidate="txtftrDesignation" 
          Text="*" ValidationGroup="validaiton" /> 
        </FooterTemplate> 
       </asp:TemplateField> 
      </Columns> 

<HeaderStyle BackColor="#61A6F8" Font-Bold="True" ForeColor="White"></HeaderStyle> 
     </asp:GridView> 
    </div> 
    <div> 
     <asp:Label ID="lblresult" runat="server"></asp:Label> 
    </div> 
    <div> 
     <asp:Button ID="btn_Excel" runat="server" Text="Excel" 
      onclick="btn_Excel_Click" /> 
    </div> 
    </form> 
</body> 
</html> 

하여 default.aspx.cs는

using System; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Drawing; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using System.Reflection; 
using System.IO; 
using System.Collections; 

public partial class _Default : System.Web.UI.Page 
{ 
    private SqlConnection con = new SqlConnection("Data Source=.;uid=sa;pwd=sa123;database=Example1"); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      BindEmployeeDetails(); 
     } 
    } 
    protected void BindEmployeeDetails() 
    { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("Select * from Employee_Details", con); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     con.Close(); 
     if (ds.Tables[0].Rows.Count > 0) 
     { 
      gvDetails.DataSource = ds; 
      gvDetails.DataBind(); 
     } 
     else 
     { 
      ds.Tables[0].Rows.Add(ds.Tables[0].NewRow()); 
      gvDetails.DataSource = ds; 
      gvDetails.DataBind(); 
      int columncount = gvDetails.Rows[0].Cells.Count; 
      gvDetails.Rows[0].Cells.Clear(); 
      gvDetails.Rows[0].Cells.Add(new TableCell()); 
      gvDetails.Rows[0].Cells[0].ColumnSpan = columncount; 
      gvDetails.Rows[0].Cells[0].Text = "No Records Found"; 
     } 
    } 
    protected void gvDetails_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     gvDetails.EditIndex = e.NewEditIndex; 
     BindEmployeeDetails(); 
    } 
    protected void gvDetails_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     int userid = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Value.ToString()); 
     string username = gvDetails.DataKeys[e.RowIndex].Values["UserName"].ToString(); 
     TextBox txtcity = (TextBox)gvDetails.Rows[e.RowIndex].FindControl("txtcity"); 
     TextBox txtDesignation = (TextBox)gvDetails.Rows[e.RowIndex].FindControl("txtstate"); 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("update Employee_Details set City='" + txtcity.Text + "',Designation='" + txtDesignation.Text + "' where UserId=" + userid, con); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     lblresult.ForeColor = Color.Green; 
     lblresult.Text = username + " Details Updated successfully"; 
     gvDetails.EditIndex = -1; 
     BindEmployeeDetails(); 
    } 

    protected void gvDetails_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
    { 
     gvDetails.EditIndex = -1; 
     BindEmployeeDetails(); 
    } 

    protected void gvDetails_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
     int userid = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Values["UserId"].ToString()); 
     string username = gvDetails.DataKeys[e.RowIndex].Values["UserName"].ToString(); 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("delete from Employee_Details where UserId=" + userid, con); 
     int result = cmd.ExecuteNonQuery(); 
     con.Close(); 
     if (result == 1) 
     { 
      BindEmployeeDetails(); 
      lblresult.ForeColor = Color.Blue; 
      lblresult.Text = username + " details deleted successfully"; 
     } 
    } 

    protected void gvDetails_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      //getting username from particular row 
      string username = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "UserName")); 
      //identifying the control in gridview 
      ImageButton lnkbtnresult = (ImageButton)e.Row.FindControl("imgbtnDelete"); 
      //raising javascript confirmationbox whenver user clicks on link button 
      if (lnkbtnresult != null) 
      { 
       lnkbtnresult.Attributes.Add("onclick", "javascript:return ConfirmationBox('" + username + "')"); 
      } 
     } 
    } 

    protected void gvDetails_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName.Equals("AddNew")) 
     { 
      TextBox txtUsrname = (TextBox)gvDetails.FooterRow.FindControl("txtftrusrname"); 
      TextBox txtCity = (TextBox)gvDetails.FooterRow.FindControl("txtftrcity"); 
      TextBox txtDesgnation = (TextBox)gvDetails.FooterRow.FindControl("txtftrDesignation"); 
      con.Open(); 
      SqlCommand cmd = 
       new SqlCommand("insert into Employee_Details(UserName,City,Designation) values('" 
        + txtUsrname.Text + "','" + txtCity.Text + "','" + txtDesgnation.Text + "')", con); 
      int result = cmd.ExecuteNonQuery(); 
      con.Close(); 
      if (result == 1) 
      { 
       BindEmployeeDetails(); 
       lblresult.ForeColor = Color.Blue; 
       lblresult.Text = txtUsrname.Text + " Details inserted successfully"; 
      } 
      else 
      { 
       lblresult.ForeColor = Color.Red; 
       lblresult.Text = txtUsrname.Text + " Details not inserted"; 
      } 
     } 
    } 
    protected void btn_Excel_Click(object sender, EventArgs e) 
    { 
     this.gvDetails.AllowPaging = false; 
     this.gvDetails.AllowSorting = false; 
     this.gvDetails.EditIndex = -1; 
     this.BindEmployeeDetails(); 
     Response.Clear(); 
     Response.ContentType = "application/vnd.xls"; 
     Response.AddHeader("content-disposition", "attachment;filename=MyList.xls"); 
     Response.Charset = ""; 
     StringWriter swriter = new StringWriter(); 
     HtmlTextWriter hwriter = new HtmlTextWriter(swriter); 
     gvDetails.RenderControl(hwriter); 
     Response.Write(swriter.ToString()); 
     Response.End(); 
    } 
    public override void VerifyRenderingInServerForm(Control control) 
    { 
     //to Render Control 
    } 
} 

내 코드는 잘 작동합니다. 하지만 내 Excel 파일은 다음과 같습니다. Excel output

그래서 DataGrid의 이미지를 내보내는 것을 원하지 않습니다. 어떻게 할 수 있습니까? 친절하게 회신합니다.

+0

볼 http://stackoverflow.com/questions/10411520/export-grid-view : 버튼에서

protected void btn_Excel_Click(object sender, EventArgs e){ExportUsersDataTable()} 

은 함수 정의는 함수 ExportUsersDataTable에게 문의 클릭 -to-excel-excel-excel-file-to-folder – InContext

+1

도움이되지 않습니다. 동일한 결과를 얻는 것입니다 .... 내가 원하는 것은 DataGrid에서 데이터를 내보내는 동안 내 DataGrid에서 이미지를 제거하는 것입니다. ... – Luv

+0

'GridV를 내보내는 대신 DataTable 또는 DataView를 내보내는 것이 어떻습니까? iew'? 'DataTable'을'DataView'로 변환하는 동안 불필요한 컬럼을 제거 할 수 있습니다. 원하는 경우 코드를 제공 할 수 있습니다. –

답변

1

나는 해결책을 얻었다. (동료로부터). 정답이라면 내 대답에 투표하십시오. 설명 : 1. 먼저 임시 테이블을 만들어야합니다. 2. 이제 DataGrid에서 필수 열만 추가하십시오. 임시 테이블을 사용하여 Excel에서 데이터 내보내기.

코드 :

public void ExportUsersDataTable() 
{ 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("Select * from Employee_Details", con); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    con.Close(); 
    string sFilename = "UserToRoleMapping.xls"; 
    HttpResponse response = HttpContext.Current.Response; 
    response.Clear(); 
    response.Charset = ""; //string.Empty; 
    response.ContentType = "application/vnd.ms-excel"; 
    response.AddHeader("Content-Disposition", "attachment;filename=\"" + sFilename + "\""); 
    using (StringWriter sw = new StringWriter()) 
    { 
     using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
     { 
      GridView gvTemp = new GridView(); 

      //Temporary Table for changing the ExcelSheet Headers 
      DataTable dtTemp = new DataTable(); 
      dtTemp.Columns.Add("User Id"); 
      dtTemp.Columns.Add("User Name"); 
      dtTemp.Columns.Add("City"); 
      dtTemp.Columns.Add("Designation"); 
      dtTemp.AcceptChanges(); 

      if (ds.Tables[0].Rows.Count > 0) 
      { 
       for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
       { 
        DataRow dr = dtTemp.NewRow(); 
        dr["User Id"] = ds.Tables[0].Rows[i]["UserId"].ToString(); 
        dr["User Name"] = ds.Tables[0].Rows[i]["UserName"].ToString(); 
        dr["City"] = ds.Tables[0].Rows[i]["City"].ToString(); 
        dr["Designation"] = ds.Tables[0].Rows[i]["Designation"].ToString(); 
        dtTemp.Rows.Add(dr); 
        dtTemp.AcceptChanges(); 
       } 
      } 

      if (dtTemp.Rows.Count > 0) 
      { 
       gvTemp.DataSource = dtTemp; 
       gvTemp.DataBind(); 
       gvTemp.RenderControl(htw); 
       response.Write(sw.ToString()); 
      } 
      response.End(); 
     } 
    } 
} 
관련 문제