2013-10-06 3 views
0

웹 응용 프로그램에서 작업 중이므로 Excel로 목록보기를 내보낼 수 있어야합니다. 목록 뷰가 바인딩되어 있지만 데이터 내보내기 기능이 작동하지 않습니다. 이 기능은 <asp:LinkButton><asp:Imagebutton>에 걸려있는 것으로 보입니다. 이 문제를 해결하는 방법을 알고있는 사람이 있습니까?Excel로 목록보기 내보내기 (문제 해결)

public void ExportIntoExcel(ListView lvExport, string Header, string FileName) 
{ 
    try 
    { 
     System.Web.HttpContext.Current.Response.Clear(); 
     System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; 
     System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + FileName + ".xls"); 
     System.Web.HttpContext.Current.Response.Charset = ""; 
     System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     StringWriter stringWrite = new StringWriter(); 
     stringWrite.Write(Header); 
     stringWrite.WriteLine(); 
     HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
     HtmlForm frm = new HtmlForm(); 
     lvExport.Parent.Controls.Add(frm); 
     frm.Controls.Add(lvExport); 
     frm.RenderControl(htmlWrite); 
     System.Web.HttpContext.Current.Response.Write(stringWrite.ToString()); 
    } 
    catch (Exception ex) 
    { 
    } 
    finally 
    { 
     System.Web.HttpContext.Current.Response.End(); 
    } 
} 

protected void export_Click(object sender, EventArgs e) 
{ 
    if (paidlv.Visible == true) 
    { 
     ExportIntoExcel(paidlv, "Income Summary", "incomesummary"); 
    } 
} 

업데이트 : 여기에 전체의 목록보기가 그래서 당신은 <asp:LinkButton>s<asp:Imagebutton>s을 참조 할 수있다 .

<asp:ListView ID="paidlv" runat="server" OnPagePropertiesChanged="paidlv_PagePropertiesChanged" OnDataBound="paidlv_DataBound" OnSorting="paidlv_Sorting" Visible="true"> 
<LayoutTemplate> 
    <table class="detail"> 
     <tr> 
      <th> 
       <asp:LinkButton ID="lnkdate" runat="server" CommandName="Sort" CommandArgument="pmtpaydate1">Date</asp:LinkButton> 
       <asp:Image runat="server" ID="SortRevImage5" ImageUrl="~/img/arrows.png" Visible="false" /> 
      </th> 
      <th> 
       <asp:LinkButton ID="lnktname" runat="server" CommandName="Sort" CommandArgument="tname">Transaction Name</asp:LinkButton> 
       <asp:Image runat="server" ID="SortRevImage2" ImageUrl="~/img/arrows.png" Visible="false" /> 
      </th> 
      <th> 
       <asp:LinkButton ID="lnkcname" runat="server" CommandName="Sort" CommandArgument="cname">Client Name</asp:LinkButton> 
       <asp:Image runat="server" ID="SortRevImage1" ImageUrl="~/img/arrows.png" Visible="false" /> 
      </th> 
      <th> 
       <asp:LinkButton ID="lnkhalf" runat="server" CommandName="Sort" CommandArgument="pmtdesc1">Portion</asp:LinkButton> 
       <asp:Image runat="server" ID="SortRevImage3" ImageUrl="~/img/arrows.png" Visible="false" /> 
      </th> 
      <th> 
       <asp:LinkButton ID="lnkamt" runat="server" CommandName="Sort" CommandArgument="pmtamt">Amount</asp:LinkButton> 
       <asp:Image runat="server" ID="SortRevImage4" ImageUrl="~/img/arrows.png" Visible="false" /> 
      </th> 
      <th>Delete</th> 
     </tr> 
     <tr id="itemPlaceholder" runat="server"></tr> 
    </table> 
    <div class="pager"> 
     <asp:DataPager ID="paidpager" runat="server" PageSize="20" PagedControlID="paidlv"> 
      <Fields> 
       <asp:NextPreviousPagerField ShowNextPageButton="False" ButtonCssClass="previousNextLink" /> 
       <asp:NumericPagerField ButtonCount="10" ButtonType="Link" NumericButtonCssClass="numericLink" /> 
       <asp:NextPreviousPagerField ShowPreviousPageButton="False" ButtonCssClass="previousNextLink" /> 
      </Fields> 
     </asp:DataPager> 
    </div> 
</LayoutTemplate> 
<ItemTemplate> 
    <tr class="altRow rowcolor"> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lbldate"><%#Eval("pmtdate", "{0:d}") %></asp:Label> 
     </td> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lbltname"><%#Eval("tname") %></asp:Label> 
     </td> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lblcname"><%#Eval("cname") %></asp:Label> 
     </td> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lblhalf"><%#Eval("half").ToString() == "1" ? "First" : Eval("half").ToString() == "2" ? "Second" : "Full" %></asp:Label> 
     </td> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lblamt"><%#Eval("pmtamt", "{0:C}") %></asp:Label> 
     </td> 
     <td> 
      <asp:ImageButton runat="server" ID="btndelete" ImageUrl="~/img/delete.png" OnClick="btndelete_Click" PostBackUrl="~/transaction.aspx" CssClass="deletebutton" CommandArgument='<%#Eval("transactionid") %>' /> 
     </td> 
     <asp:HiddenField runat="server" ID="lblrevid" Value='<%#Eval("transactionid") %>' /> 
    </tr> 
</ItemTemplate> 
<AlternatingItemTemplate> 
    <tr class="rowcolor"> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lbldate"><%#Eval("pmtdate", "{0:d}") %></asp:Label> 
     </td> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lbltname"><%#Eval("tname") %></asp:Label> 
     </td> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lblcname"><%#Eval("cname") %></asp:Label> 
     </td> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lblhalf"><%#Eval("half").ToString() == "1" ? "First" : Eval("half").ToString() == "2" ? "Second" : "Full" %></asp:Label> 
     </td> 
     <td class="valigntop" onclick="DoNav('<%# Eval("transactionid","bookdeal.aspx?tid={0}") %>');"> 
      <asp:Label runat="server" ID="lblamt"><%#Eval("pmtamt", "{0:C}") %></asp:Label> 
     </td> 
     <td> 
      <asp:ImageButton runat="server" ID="btndelete" ImageUrl="~/img/delete.png" OnClick="btndelete_Click" PostBackUrl="~/transaction.aspx" CssClass="deletebutton" CommandArgument='<%#Eval("transactionid") %>' /> 
     </td> 
     <asp:HiddenField runat="server" ID="lblrevid" Value='<%#Eval("transactionid") %>' /> 
    </tr> 
</AlternatingItemTemplate> 
<EmptyDataTemplate> 
      <table id="empty"> 
       <tr> 
        <td id="tdempty"> 
         <br /> 
         Sorry, no data found 
        </td> 
       </tr> 
      </table> 
</EmptyDataTemplate> 
</asp:ListView> 
+0

데이터에 의해 그것을 시도 할 수 있습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

알겠습니다. 고마워요. – fcholmes

답변

1

당신은 내가 제목을 편집 한

private void DataTableToExcel(DataTable dataTable) 
{ 
    StringWriter writer = new StringWriter(); 
    HtmlTextWriter htmlWriter = new HtmlTextWriter(writer); 
    GridView gridView = new GridView(); 
    gridView.DataSource = dataTable; 
    gridView.AutoGenerateColumns = true; 
    gridView.DataBind(); 
    gridView.RenderControl(htmlWriter); 
    htmlWriter.Close(); 

    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment;filename=FileName.xls"); 
    Response.Charset = ""; 
    Response.Write(writer.ToString()); 
    Response.End(); 
} 
+0

감사합니다. 한스. 그것은 트릭을했다. 나는 새로운 데이터 테이블을 만들고, 헤더를 추가하고, 내 행을 통해 foreach 된 다음 내보낼 메서드를 사용했습니다. 한 가지 개선 된 점은 Response.ContentType을 추가하여 저장 대화 상자가 자동으로 기본적으로 Excel을 선택한다는 것입니다. 게시물을 편집하여 후반 작업을 수행했습니다. – fcholmes