2010-11-15 34 views
0

J'exporte des données que j'ai dans une base de données dans Excel. Bien que le code ci-dessous fonctionne bien, je voudrais savoir comment manipuler les en-têtes, les couleurs, et généralement la façon dont les cellules ont l'air?Comment formater des cellules de fichier Excel lorsque des données sont exportées à partir de la base de données SQL Server

page.aspx

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT ID, Number, Title, Name FROM Requests"> 
<SelectParameters> 
     <asp:QueryStringParameter DefaultValue="" Name="ID" 
      QueryStringField="ID" Type="Int32" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

    <asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" 
    AutoGenerateRows="False" DataKeyNames="RequestID" DataSourceID="SqlDataSource1"> 
    <Fields> 
      <asp:BoundField DataField="ID" HeaderText="ID" 
      SortExpression="ID" InsertVisible="False" ReadOnly="True" /> 
     <asp:BoundField DataField="Number" HeaderText="Number" 
      SortExpression="Number" /> 
     <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" 
      SortExpression="Name" /> 

page.aspx.vb

Dim tw As New System.IO.StringWriter() 
    Dim hw As New System.Web.UI.HtmlTextWriter(tw) 

    Dim dgGrid As New DetailsView() 

    dgGrid.DataSource = SqlDataSource1 

    hw.WriteLine("<b>Title here</b>") 

    dgGrid.HeaderStyle.Font.Bold = True 
    dgGrid.DataBind() 
    dgGrid.RenderControl(hw) 

    Response.AddHeader("content-disposition", "attachment;filename=ReportOuput.xls") 
    Response.ContentType = "application/vnd.ms-excel" 
    Me.EnableViewState = False 
    Response.Write(tw.ToString()) 
    Response.End() 

Répondre

0

Le code suivant ne le travail (je pense que je liant les DetailsView trop tôt. Les programmeurs expliquer si possible, merci u)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    Response.Clear() 
    Response.Buffer = True 
    Response.AddHeader("content-disposition", "attachment;filename=ReportOutput.xls") 
    Response.Charset = "" 
    Response.ContentType = "application/vnd.ms-excel" 

    Dim tw As New System.IO.StringWriter() 
    Dim hw As New System.Web.UI.HtmlTextWriter(tw) 

    hw.WriteLine("<h3>Output Form</h3>") 
    DetailsView1.DataSource = SqlDataSource1 
    DetailsView1.DataBind() 
    DetailsView1.RenderControl(hw) 
    Dim style As String = "<style> .textmode { mso-number-format:\@; } </style>" 

    Response.Write(style) 
    Response.Output.Write(tw.ToString()) 
    Response.Flush() 
    Response.End() 
    end Sub 

Dans mon DetailsView, je peux maintenant modifier la couleur de fond des cellules, la taille, etc, par exemple:

<asp:TemplateField HeaderStyle-BorderColor="LightGray" ItemStyle-BorderColor="LightGray" HeaderStyle-BackColor="LightGray" ItemStyle-BackColor="LightGray" HeaderText="Personal Details"></asp:TemplateField> 
    <asp:BoundField DataField="Title" HeaderText="Dependants" ItemStyle-HorizontalAlign="Right" SortExpression="Dependants" /> 

Je peux aussi modifier le texte, la couleur, etc dans mon code derrière, par exemple:

Protected Sub DetailsView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DetailsView1.DataBound 
If DetailsView1.Rows(12).Cells(1).Text = "False" Then 
     DetailsView1.Rows(12).Cells(1).Text = "This is false" 
    ElseIf DetailsView1.Rows(12).Cells(1).Text = "True" Then 
     DetailsView1.Rows(12).Cells(1).Text = "This is true" 
    End If 
    end sub 
1

J'utilise comme suit pour définir le format numérique. Recherchez mso-number-format pour trouver plus d'informations.

chaîne de style = @ ".text {mso-nombre-format: \ @;}";