这是我的代码
Dim dt As DataTable = New DataTable("Intervenant")
For Each column As DataControlField In grdvIntervenants.Columns
dt.Columns.Add(New DataColumn(column.HeaderText))
Next
Dim dr As DataRow
For Each row As GridViewRow In grdvIntervenants.Rows
dr = dt.NewRow()
dr.Item(0) = row.Cells(0)
dr.Item(1) = row.Cells(1)
dr.Item(2) = row.Cells(2)
dr.Item(3) = row.Cells(3)
dr.Item(4) = row.Cells(4)
dr.Item(5) = row.Cells(5)
dt.Rows.Add(dr)
Next
'add new intervenant
dr = dt.NewRow()
dr.Item(0) = Nom
dr.Item(1) = Prenom
dr.Item(2) = Courriel
dr.Item(3) = False
dr.Item(4) = True
dr.Item(5) = IdIntervenant
dt.Rows.Add(dr)
grdvIntervenants.DataSource = dt
grdvIntervenants.DataBind()
我使用VB.NET作为后台代码在ASP.NET中开发。我在vs2008上使用Windows 7企业版(如果该信息有任何帮助)
我刚刚重新启动VB.Net并且我第一次使用没有DataBase的gridview,所以也许我错过了一些东西。基本上,我试图将DataRow(dr)添加到DataTable(dt),然后将所述DataTable放入Gridview(grdvIntervenants)。
我的第一步是获取gridview并将其所有数据放入DataTable。然后我创建一个DataRow(dr),我用变量填充,然后将DataRow添加到DataTable。之后,我将DataTable作为DataSource并绑定GridView。
问题是我的GridView显示了行但它们是空的。 在调试时,我发现此错误与所有 DataRow.Item 相邻: “为了评估索引属性,必须限定属性并且必须由用户显式提供参数”在网上搜索它,我发现这是一个有时会发生的问题vb用户,但我无法为我的问题找到任何解决方案。
我没有完全理解错误,所以我尝试了许多不同的方法将数据添加到DataRow但无济于事。我也尝试了添加列的不同方式,认为索引问题可能来自那里,但同样,问题仍然存在。现在,我发现奇怪的是我的DataRow的Item属性给出了引用的错误,但是我看到了DataRow的ItemArray中的值。
我还发现在dataTable的columns属性旁边会出现相同的错误。
当我尝试使用DataBinder从我的rowDatabound方法中的DataSource访问数据时,它会给我null结果......
所以我的问题是:我缺少什么?
答案 0 :(得分:0)
您的问题很可能是您使用HeaderText作为数据表的列名,但这可能不正确。
您可能应该测试每列是否为BoundField,如果是,请使用BoundField.DataField作为DataTable的列名。
例如:
For Each column As DataControlField In GridView1.Columns
If TypeOf column Is BoundField Then
dt.Columns.Add(New DataColumn(DirectCast(column, BoundField).DataField))
End If
Next