2017-03-16 107 views
1

我想通过以下代码循环查找DateTime列。我无法让代码工作。我错过了什么吗?谢谢。无法获取列数据类型

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

我缺少的东西?是的,你错过了这个问题的描述。不起作用不是一个适当的描述。也就是说,Office收集指数通常从1开始,而.Net收集指数从0开始。 – TnTinMn

+0

Hello TnTinMn,抱歉,因为我不想让自己的代码完成的更具描述性。简单地说,我试图让我的代码遍历每一列来查找找到的DateTime数据类型。如果类型存在,然后转换数据值以反映mm/dd/yy hh:ss格式....我尝试将索引设置为0或1,但数据值保持原始状态,不会更改为所需的格式。谢谢! –

回答

1

快到了,但需要以下更改:

  1. DataSource获取列数。
  2. 修复收藏索引。

测试和工作:

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

你好kuujinbo,谢谢你的回复,我认为你的修改是可行的,值得信任,但我仍然无法工作,我缩小了实际问题的范围,DateTime可能不是正确的数据类型。我有机会看到这些数据,那个特定的列是十进制/双精度,我将不得不将它转换成DateTime,希望这会回到正确的轨道上。谢谢! –

+0

@ChungLee - 你是对的。 .Numberformat.Format'只有在数据类型为DateTime时才能使用。 – kuujinbo

0

尝试

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

感谢您的回复,TonyW。它给了我两个错误:'类型的值不能转换为布尔值'和'期望的语句结束'。 –

+0

试试这个--- ws.Column(i).DefaultCellStyle.Format =“mm/dd/yyyy hh:mm”“ – codeMonger123

+0

你好codeMonger123,我得到的'DefaultCellStyle不是OfficeOpenXML.ExcelColumn的成员'错误 –