2009-01-13 13 views
5

Im Moment bin ich mit diesem einem Repeater zu exportieren (mit mehreren verschachtelten Repeater) zu übertreffen:Von einem Repeater nach Excel exportieren?

protected void ExportToExcel(object sender, EventArgs e) 
{  
Response.Clear(); 
Response.Buffer = true; 
Response.AddHeader("content-disposition", "attachment;filename=finance.xls"); 
Response.Charset = ""; 
Response.ContentType = "application/vnd.ms-excel"; 
System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
rptMinistry.RenderControl(htmlWrite); 
Response.Write(stringWrite.ToString()); 
Response.End(); 
} 

Aber das tut, ist nicht das, was ich will. Stattdessen ist es mir html in der Excel-Datei geben (obwohl die Daten gibt es) das ist, was ich bekommen (jede Zeile eine Zelle im Excel-Blatt ist):

<tr class="alt"> 
<td class='hidden'>LOR In Development</td> 
<td>MOD</td> 
<td>Air Force</td> 
<td class="size1"></td> 
<td>Hellfire (AGM-114) Follow On</td> 
<td>10-Mar-08</td> 
<td class="align_right ">$50,000,000.00</td> 
<td class="align_right hidden">$0.00</td> 
</tr> 

<tr class="alt"> 
<td class='hidden'>LOR In Development</td> 
<td>MOD</td> 
<td>Air Force</td> 
<td class="size1"></td> 
<td>Precision Strike Mi-17 (block 20)</td> 
<td>17-May-08</td> 
<td class="align_right ">$20,100,000.00</td> 
<td class="align_right hidden">$0.00</td> 
</tr> 

und so weiter ... jetzt die Daten ist richtig, aber wie bekomme ich es richtig in der Tabelle angezeigt?

Antwort

12

Sie müssen all das in Tabellen-Tags einschließen. Excel kann HTML-Tabellenstrukturen verstehen.

Versuchen:

Response.Write("<table>"); 
Response.Write(stringWrite.ToString()); 
Response.Write("</table>"); 
+0

so einfach ... kann ich, dass dank nicht glauben verpasst! – naspinski

0

sollten Sie die Ausgabedatei eine geeignete HTML-Datei machen, mit den HTML-und Body-Tags. Das sollte besser funktionieren.

0

Ihre Frage nicht direkt zu beantworten, aber da Sie meine Meinung nach

für die irgendwie von Daten, ist meiner Meinung nach, dass Sie ein Gridview-Steuerelement verwenden sollten, Ihr Beispiel nehmen Sie wie etwas schreiben müssen:

<asp:Repeater ID="rpt" runat="server" DataSourceID="ods"> 
    <HeaderTemplate> 
     <table> 
     <tr> 
      <td>Header</td> 
      <td>Type</td> 
      <td>Name</td> 
      <td>Date</td> 
      <td>Amount</td> 
     </tr> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td> 
       <%#Eval("Header")%> 
      </td> 
      <td> 
       <%#Eval("Type")%> 
      </td> 
      <td> 
       <%#Eval("Name")%> 
      </td> 
      <td> 
       <%#Eval("Date", "{0:d}")%> 
      </td> 
      <td> 
       <%#Eval("Value", "{0:c}")%> 
      </td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

ein Gridview alle ou nee dto Schreib im HTML-Teil unter Verwendung ist nur:

<asp:GridView ID="gv" runat="server" DataSourceID="ods" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="Header" HeaderText="Header" /> 
     <asp:BoundField DataField="Type" HeaderText="Type" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
     <asp:BoundField DataField="Date" DataFormatString="{0:d}" HeaderText="Date" /> 
     <asp:BoundField DataField="Value" DataFormatString="{0:c}" HeaderText="Value" /> 
    </Columns> 
</asp:GridView> 

etwas einfacher und leichter zu lesen

Sie haben viel mehr Kontrolle mit einem GridView-Objekt als einen Repeater, und Sie werden nie diese Art von Problemen haben, weil das Rendern der GridView immer mit den Tabellen-Tags kam.

Hoffe, dass es

hilft Und BTW, testete ich Ihren Fall und ich habe keine Probleme, auch wenn ich nicht writting wurde erwähnen die Tags wie Spencer.

meinen Code sehen: File with HTML and Method-File with myObject

Verwandte Themen