我已尝试过抛出强制转换异常的代码:
Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets.Add(pageTitle)
Dim dataTable As DataTable
dataTable = dataGridView.DataSource ' cast exception
例外:
System.InvalidCastException:无法转换类型的对象 ' System.Windows.Forms.BindingSource'输入 ' Microsoft.Office.Interop.Excel.DataTable'
我需要DataTable
来设置工作表:
worksheet.Cells("A1").LoadFromDataTable(dataTable, True)
答案 0 :(得分:1)
如果您无法直接将DataSource
转换为DataTable
,则可以使用以下例程将DataGridView
中的可见数据提取到新的DataTable
:
Public Function Dgv2Dtb(ByVal dgv As DataGridView) As DataTable
Dim dtbOutput As New DataTable
For intCol As Integer = 0 To dgv.Columns.Count - 1
Dim dgvc As DataGridViewColumn = dgv.Columns(intCol)
Dim dtyCol As System.Type = dgvc.ValueType
If dtyCol Is Nothing And dgvc.CellType.Name = "DataGridViewTextBoxCell" Then
dtyCol = GetType(String)
End If
Dim dclOutput As DataColumn = New DataColumn(dgvc.HeaderText, dtyCol)
dtbOutput.Columns.Add(dclOutput)
Next intCol
For intRow As Integer = 0 To dgv.Rows.Count - 1
Dim drwNew As DataRow = dtbOutput.NewRow()
Dim dgvr As DataGridViewRow = dgv.Rows(intRow)
For intCol As Integer = 0 To dgv.Columns.Count - 1
drwNew.Item(intCol) = dgvr.Cells(intCol).Value
Next intCol
dtbOutput.Rows.Add(drwNew)
Next intRow
Return dtbOutput
End Function
用法:
Dim dtbNew As DataTable = Dgv2Dtb(dgvMyDataGridView)