2009-09-01 9 views
2

J'ai lu plusieurs tutoriels en ligne et semble manquer quelque chose. J'essaye d'avoir les 0 principaux montrés dans des colonnes en mettant le format au texte.Exporter Gridview vers Excel avec des lignes au format texte

Toutes les suggestions seraient appréciées.

''' <summary> 
    ''' This is required for the grid view to export properly 
    ''' </summary> 
    ''' <param name="control"></param> 
    ''' <remarks></remarks> 
    Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control) 
    End Sub 

    Protected Overrides Sub OnInitComplete(ByVal e As System.EventArgs) 

      Dim List As System.Web.UI.WebControls.GridView = CType(Page.FindControl("List"), System.Web.UI.WebControls.GridView) 
      AddHandler List.RowDataBound, AddressOf RowDataBound 

      List.DataSource = myList 
      List.DataBind() 

      Response.Clear() 
      Response.ContentType = "application/vnd.ms-excel" 
      HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=ExportList.xls") 

      Response.Write("<style> .text {mso-number-format:\@; } </style>") 

      Using strwriter As New System.IO.StringWriter 
       Using htmlwriter As New HtmlTextWriter(strwriter) 

        List.RenderControl(htmlwriter) 

        HttpContext.Current.Response.Write(strwriter.ToString) 
        HttpContext.Current.ApplicationInstance.CompleteRequest() 
       End Using 
      End Using 

    End Sub 

    Protected Sub RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) 

     If e.Row.RowType = DataControlRowType.DataRow Then 

      e.Row.Cells(0).Attributes.Add("class", "text") 

      Dim dtview As System.Data.DataRowView 
      Dim dt As DateTime 
      Dim intCounter As Integer 

      dtview = e.Row.DataItem 

      For intCounter = 0 To dtview.Row.ItemArray.Length - 1 

       If TypeOf dtview.Row.Item(intCounter) Is System.DateTime Then 
        dt = dtview.Row.Item(intCounter) 
        e.Row.Cells(intCounter).Text = dt.ToLongDateString 
       End If 

      Next 
     End If 

    End Sub 

Répondre

4

Il existe une meilleure façon d'obtenir le même résultat, il suffit d'ajouter une ligne et cela fonctionnera. Au lieu de créer une feuille de style et d'ajouter des attributs pour toutes les balises <TD> à l'aide d'une boucle, appliquez un style direct sur toutes les balises TD.

string style = @"<style> TD { mso-number-format:\@; } </style>"; 
+0

Cela fonctionne vraiment. Dans mon cas, il empêche certains formats numériques d'être affichés en tant que date dans Excel. Les chaînes affichent toujours le texte correctement. –

Questions connexes