无法将DataTable值添加到GridView

时间:2012-01-10 21:11:27

标签: asp.net vb.net visual-studio-2008

这是我的代码

 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结果......

所以我的问题是:我缺少什么?

1 个答案:

答案 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