DataGridView 在导入时不显示数据
DataGridView doesn't show data when imported
在aspx页面的代码后面,我有一个数据表:
Dim people As DataTable = New DataTable()
people.Columns.Add("ID", System.Type.GetType("System.Int32"))
people.Columns.Add("FirstName", System.Type.GetType("System.String"))
people.Columns.Add("LastName", System.Type.GetType("System.String"))
people.Rows.Add(10, "Merci", "Beaucoup")
这是 GridViewData:(不是 asp:GridView)
Dim gvPeople As System.Windows.Forms.DataGridView = New DataGridView()
gvPeople.AutoGenerateColumns = False
'Set Columns Count
gvPeople.ColumnCount = 3
'Add Columns
gvPeople.Columns(0).Name = "ID"
gvPeople.Columns(0).HeaderText = "ID"
gvPeople.Columns(0).DataPropertyName = "ID"
gvPeople.Columns(1).Name = "FirstName"
gvPeople.Columns(1).HeaderText = "FirstName"
gvPeople.Columns(1).DataPropertyName = "FirstName"
gvPeople.Columns(2).Name = "LastName"
gvPeople.Columns(2).HeaderText = "LastName"
gvPeople.Columns(2).DataPropertyName = "LastName"
这里我将DataGridView的数据源设置为DataTable:
gvPeople.DataSource = people
当我使用 Gembox.Spreadsheet
将 DataGridView 导入 Excel sheet 时,它只显示没有数据的 DataGridView 的 headerText。
这是导入代码:
DataGridViewConverter.ImportFromDataGridView(ws, gvPeople, New ImportFromDataGridViewOptions() With _
{
.ColumnHeaders = True,
.StartRow = 8,
.StartColumn = 0
})
我尝试了多种方法,例如:
设置 .DataMember
到 DataTable 名称:gvPeople.DataMember=people.TableName
Refresh()
或 Update()
分配 .Datasource
.
后的 DataGridView
注意:这不是 asp:GridView
,它是 DataGridView
并且没有 DataBind()
方法。
如果使用asp:GridView
,只需使用databind
函数
gvPeople.DataSource = people
gvPeople.Databind()
注意:不建议在 Web 项目中使用 datagridView 此控件是为 winforms 应用程序设计的。
如果使用windows.Forms.DataGridView
DataGridView
必须添加到表单控件集合才能执行其布局
Me.Controls.Add(gvPeople)
但是在使用web项目时无法做到这一点(报错)
所以你必须做一些变通
首先我创建了一个将数据行转换为字符串数组的函数
Public Function ToStringArray(ByVal dRow As DataRow) As String()
Dim lst As New List(Of Object)
lst.AddRange(dRow.ItemArray)
Return lst.Select(Function(x) x.ToString).ToArray()
End Function
然后我使用了下面的代码
这是您的代码:
Dim people As DataTable = New DataTable("people")
people.Columns.Add("ID", System.Type.GetType("System.Int32"))
people.Columns.Add("FirstName", System.Type.GetType("System.String"))
people.Columns.Add("LastName", System.Type.GetType("System.String"))
people.Rows.Add(10, "Merci", "Beaucoup")
Dim gvPeople As System.Windows.Forms.DataGridView = New System.Windows.Forms.DataGridView()
gvPeople.AutoGenerateColumns = False
''Set Columns Count
gvPeople.ColumnCount = 3
''Add Columns
gvPeople.Columns(0).Name = "ID"
gvPeople.Columns(0).HeaderText = "ID"
gvPeople.Columns(0).DataPropertyName = "ID"
gvPeople.Columns(1).Name = "FirstName"
gvPeople.Columns(1).HeaderText = "FirstName"
gvPeople.Columns(1).DataPropertyName = "FirstName"
gvPeople.Columns(2).Name = "LastName"
gvPeople.Columns(2).HeaderText = "LastName"
gvPeople.Columns(2).DataPropertyName = "LastName"
这是我添加的代码
For Each drow As DataRow In people.Rows
gvPeople.Rows.Add(ToStringArray(drow))
Next
gvPeople.RowCount = people.Rows.Count
gvPeople.Refresh()
您可以使用 asp gridview 而不是在 asp.net 应用程序中使用数据网格
根据以下 link
这是可能的
https://www.gemboxsoftware.com/spreadsheet/examples/asp-net-excel-export/5101
您真的应该重新考虑这种方法(在 ASP.NET 应用程序中使用 DataGridView)。
如果只想将 GridView 控件中的数据插入 Excel 文件,请使用 DataTable。
正如您在评论中提到的,您想要自定义要导出的列以及列的顺序。在这种情况下,您只需要调整 DataTable 本身,例如尝试以下操作:
' Sample DataTable.
Dim people As New DataTable()
people.Columns.Add("ID", GetType(Integer))
people.Columns.Add("FirstName", GetType(String))
people.Columns.Add("LastName", GetType(String))
people.Rows.Add(1, "John", "Doe")
people.Rows.Add(2, "Jane", "Doe")
people.Rows.Add(10, "Merci", "Beaucoup")
' Remove "ID" column.
people.Columns.Remove("ID")
' Set "LastName" column on first place.
people.Columns("LastName").SetOrdinal(0)
' Create Excel file.
Dim ef As New ExcelFile()
Dim ws As ExcelWorksheet = ef.Worksheets.Add("Sheet1")
' Insert DataTable into Excel file.
Dim op As New InsertDataTableOptions()
op.ColumnHeaders = True
ws.InsertDataTable(people, op)
' Save Excel file.
ef.Save("Sample.xlsx")
希望对您有所帮助。
另外,以防万一您在这里感兴趣的是如何将数据连同样式和格式从 GridView 控件插入到具有 GemBox.Spreadsheet 的 Excel 文件中:
https://www.gemboxsoftware.com/support-center/kb/articles/export-gridview-and-or-datagrid-control-to-excel-file
在aspx页面的代码后面,我有一个数据表:
Dim people As DataTable = New DataTable()
people.Columns.Add("ID", System.Type.GetType("System.Int32"))
people.Columns.Add("FirstName", System.Type.GetType("System.String"))
people.Columns.Add("LastName", System.Type.GetType("System.String"))
people.Rows.Add(10, "Merci", "Beaucoup")
这是 GridViewData:(不是 asp:GridView)
Dim gvPeople As System.Windows.Forms.DataGridView = New DataGridView()
gvPeople.AutoGenerateColumns = False
'Set Columns Count
gvPeople.ColumnCount = 3
'Add Columns
gvPeople.Columns(0).Name = "ID"
gvPeople.Columns(0).HeaderText = "ID"
gvPeople.Columns(0).DataPropertyName = "ID"
gvPeople.Columns(1).Name = "FirstName"
gvPeople.Columns(1).HeaderText = "FirstName"
gvPeople.Columns(1).DataPropertyName = "FirstName"
gvPeople.Columns(2).Name = "LastName"
gvPeople.Columns(2).HeaderText = "LastName"
gvPeople.Columns(2).DataPropertyName = "LastName"
这里我将DataGridView的数据源设置为DataTable:
gvPeople.DataSource = people
当我使用 Gembox.Spreadsheet
将 DataGridView 导入 Excel sheet 时,它只显示没有数据的 DataGridView 的 headerText。
这是导入代码:
DataGridViewConverter.ImportFromDataGridView(ws, gvPeople, New ImportFromDataGridViewOptions() With _
{
.ColumnHeaders = True,
.StartRow = 8,
.StartColumn = 0
})
我尝试了多种方法,例如:
设置
.DataMember
到 DataTable 名称:gvPeople.DataMember=people.TableName
Refresh()
或Update()
分配.Datasource
. 后的 DataGridView
注意:这不是 asp:GridView
,它是 DataGridView
并且没有 DataBind()
方法。
如果使用asp:GridView
,只需使用databind
函数
gvPeople.DataSource = people
gvPeople.Databind()
注意:不建议在 Web 项目中使用 datagridView 此控件是为 winforms 应用程序设计的。
如果使用windows.Forms.DataGridView
DataGridView
必须添加到表单控件集合才能执行其布局
Me.Controls.Add(gvPeople)
但是在使用web项目时无法做到这一点(报错)
所以你必须做一些变通
首先我创建了一个将数据行转换为字符串数组的函数
Public Function ToStringArray(ByVal dRow As DataRow) As String()
Dim lst As New List(Of Object)
lst.AddRange(dRow.ItemArray)
Return lst.Select(Function(x) x.ToString).ToArray()
End Function
然后我使用了下面的代码
这是您的代码:
Dim people As DataTable = New DataTable("people")
people.Columns.Add("ID", System.Type.GetType("System.Int32"))
people.Columns.Add("FirstName", System.Type.GetType("System.String"))
people.Columns.Add("LastName", System.Type.GetType("System.String"))
people.Rows.Add(10, "Merci", "Beaucoup")
Dim gvPeople As System.Windows.Forms.DataGridView = New System.Windows.Forms.DataGridView()
gvPeople.AutoGenerateColumns = False
''Set Columns Count
gvPeople.ColumnCount = 3
''Add Columns
gvPeople.Columns(0).Name = "ID"
gvPeople.Columns(0).HeaderText = "ID"
gvPeople.Columns(0).DataPropertyName = "ID"
gvPeople.Columns(1).Name = "FirstName"
gvPeople.Columns(1).HeaderText = "FirstName"
gvPeople.Columns(1).DataPropertyName = "FirstName"
gvPeople.Columns(2).Name = "LastName"
gvPeople.Columns(2).HeaderText = "LastName"
gvPeople.Columns(2).DataPropertyName = "LastName"
这是我添加的代码
For Each drow As DataRow In people.Rows
gvPeople.Rows.Add(ToStringArray(drow))
Next
gvPeople.RowCount = people.Rows.Count
gvPeople.Refresh()
您可以使用 asp gridview 而不是在 asp.net 应用程序中使用数据网格 根据以下 link
这是可能的 https://www.gemboxsoftware.com/spreadsheet/examples/asp-net-excel-export/5101
您真的应该重新考虑这种方法(在 ASP.NET 应用程序中使用 DataGridView)。
如果只想将 GridView 控件中的数据插入 Excel 文件,请使用 DataTable。
正如您在评论中提到的,您想要自定义要导出的列以及列的顺序。在这种情况下,您只需要调整 DataTable 本身,例如尝试以下操作:
' Sample DataTable.
Dim people As New DataTable()
people.Columns.Add("ID", GetType(Integer))
people.Columns.Add("FirstName", GetType(String))
people.Columns.Add("LastName", GetType(String))
people.Rows.Add(1, "John", "Doe")
people.Rows.Add(2, "Jane", "Doe")
people.Rows.Add(10, "Merci", "Beaucoup")
' Remove "ID" column.
people.Columns.Remove("ID")
' Set "LastName" column on first place.
people.Columns("LastName").SetOrdinal(0)
' Create Excel file.
Dim ef As New ExcelFile()
Dim ws As ExcelWorksheet = ef.Worksheets.Add("Sheet1")
' Insert DataTable into Excel file.
Dim op As New InsertDataTableOptions()
op.ColumnHeaders = True
ws.InsertDataTable(people, op)
' Save Excel file.
ef.Save("Sample.xlsx")
希望对您有所帮助。
另外,以防万一您在这里感兴趣的是如何将数据连同样式和格式从 GridView 控件插入到具有 GemBox.Spreadsheet 的 Excel 文件中:
https://www.gemboxsoftware.com/support-center/kb/articles/export-gridview-and-or-datagrid-control-to-excel-file