【问题标题】:Cannot add DataTable values to GridView无法将 DataTable 值添加到 GridView
【发布时间】:2012-01-10 21:11:27
【问题描述】:

这是我的代码

 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 中进行开发。我在使用 Windows 7 企业版的 vs2008(如果该信息有任何帮助)

我刚刚重新开始做 VB.Net 并且我第一次使用没有数据库的 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 访问数据时,它给了我空结果...

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

【问题讨论】:

  • 这没有意义。首先,您从网格中的数据创建数据表,然后使用数据表填充网格?
  • 您应该真正显示 GridView 的 aspx 标记。顺便说一句,如果您打算启用分页,您应该重新考虑您的方法(例如查询数据源),因为 GridView.Rows 仅返回当前页面的行。
  • @subt13,我从网格中的数据创建一个数据表,在我刚刚创建的数据表中添加一行,然后将现在多行的数据表放入网格中,基本上,添加一个行到网格

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


【解决方案1】:

您的问题很可能是您使用 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

【讨论】:

  • 这可能是因为我使用了标题文本因为我不想在这个问题上浪费更多时间,我手动将列创建到数据表中,而不是动态创建它们,现在是 gridview显示结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 2014-09-12
  • 1970-01-01
相关资源
最近更新 更多