2017-03-16 1 views
1

J'essaie de parcourir le code suivant pour trouver les colonnes DateTime. Je ne suis pas capable de faire fonctionner le code. Est-ce que je manque quelque chose? Merci.Impossible d'obtenir le type de données de la colonne

dGrid.DataSource = dSets.Tables(0) 
dGrid.DataBind() 
ws.Cells(1, 1).LoadFromDataTable(dGrid.DataSource, True) 
For i As Byte = 1 To dGrid.Columns.Count 
    If dSets.Tables(0).Columns(i).DataType Is GetType(DateTime) Then 
     ws.Column(i).Style.Numberformat.Format = "mm/dd/yyyy hh:mm" 
    End If 
Next 

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
Response.AddHeader("content-disposition"; attachment) 
Response.Charset = "" 
+1

Est-ce que je manque quelque chose? Oui, il vous manque une description du problème. Ne fonctionne pas n'est pas une description correcte. Cela dit, les indices de collection Office commencent souvent à 1 alors que les index de collection .Net commencent à 0. – TnTinMn

+0

Bonjour TnTinMn, désolé de ne pas être plus descriptif de ce que j'essaie de faire accomplir mon code. Simplement j'essaye d'obtenir mon code pour passer par chaque colonne pour trouver des trouvailles qui sont le type de données DateTime. Si le type existe, convertissez les valeurs de données pour refléter le format mm/jj/aa hh: ss .... J'ai essayé de définir les indices avec 0 ou 1, mais les valeurs de données restent à l'état brut et ne changent pas le format désiré. Merci! –

Répondre

1

On y est presque, mais ont besoin les modifications suivantes:

  1. Obtenez le nombre de colonnes de DataSource.
  2. Correction de l'indexation de la collection.

Testé et travail:

dataGrid.DataSource = dataSet.Tables(0) 
dataGrid.DataBind() 
ws.Cells(1, 1).LoadFromDataTable(dataGrid.DataSource, True) 
Dim data = dataGrid.DataSource 
' get column count from DataSource: dGrid.Columns.Count is 0 
Dim columnCount = data.Columns.Count 
For i = 0 To columnCount - 1 
    If data.Columns(i).DataType Is GetType(DateTime) Then 
     ws.Column(i + 1).Style.Numberformat.Format = "mm/dd/yyyy hh:mm" 
    End If 
Next 
+0

Bonjour kuujinbo, merci pour la réponse.Je pense que vos changements fonctionneraient et méritent le crédit.Je ne suis toujours pas capable de faire fonctionner le mien.J'ai réduit ce que le problème est réel.TimeTime peut ne pas être le bon type de données tout le temps. J'ai eu l'occasion de regarder ces données.Cette colonne spécifique est une variété décimale/double.Je vais devoir convertir en DateTime.Espérons que cela se remet sur la bonne voie.Merci! –

+0

@ChungLee - Vous avez raison. .Numberformat.Format' ne fonctionnera que si le type de données est 'DateTime'. – kuujinbo

0

Essayez

For i As Byte = 1 To dGrid.Columns.Count 
    If dt.Columns[i].DataType Is GetType(DateTime) Then 
     ws.Column(i).Style.Numberformat.Format = "mm/dd/yyyy hh:mm" 
    End If 
Next 
+0

Merci d'avoir répondu, TonyW. Cela me donne deux erreurs: une «valeur de type ne peut pas être convertie en booléen» et «fin de l'instruction attendue». –

+0

try this --- ws.Column (i) .DefaultCellStyle.Format = "mm/jj/aaaa hh: mm" " – codeMonger123

+0

Bonjour codeMonger123, j'obtiens l'erreur" DefaultCellStyle n'est pas un membre de OfficeOpenXML.ExcelColumn " –