【问题标题】:Converting DataView to DataTable将数据视图转换为数据表
【发布时间】:2018-05-11 12:29:40
【问题描述】:

我的表单与 search用户按钮当我选择按钮时,模态弹出扩展器将显示和用户可以搜索所有员工,选择值时,所选值应该传递给父格式与另一个gridview。

现在,我有一个将数据视图转换为数据表的代码。调试时 index (s) 的值没有传递给 (idx)。

Dim RowIndex As Integer = gvUser.EditIndex
    Dim dt As New DataTable
    dt = TryCast(Session("dbCache_User"), DataView).Table.Clone

    Dim dv As New DataView(dt, "", "USR_IDNTY", DataViewRowState.OriginalRows)
    Dim s As String = TryCast(gvUser.Rows(RowIndex).FindControl("lblUSR_IDNTY"), Label).Text
    Dim idx As Integer = dv.Find(s)

    dv(idx)("USR_ID") = row.Cells(1).Text
    dv(idx)("NAME") = row.Cells(2).Text

    gvUser.DataSource = dv
    gvUser.DataBind()

当我尝试调试时。我尝试搜索索引为 4 的一行; (s) 的值为 4,但传递给 (idx) 时为 -1。

我需要找到值 s。

【问题讨论】:

    标签: asp.net vb.net datatable dataview


    【解决方案1】:

    您似乎没有阅读相关文档。这是来自DataTable.Clone 方法的文档:

    Clone 创建一个与原始 DataTable 结构相同的新 DataTable,但不复制任何数据(新 DataTable 将不包含任何 DataRows)。要将结构和数据都复制到新的 DataTable 中,请使用 Copy。

    如果dvdt 的视图并且dt 不包含任何行,那么Find 当然会返回-1。即使没有阅读该文档,您为什么不知道您的 DataTable 是空的?这是您应该检查的第一件事。

    【讨论】:

    • -1 表示不匹配。其他任何内容都意味着在该索引处找到了匹配项。如果Find 返回 0,则表示在第一行中找到了匹配项。如果您认为它应该是不同的行,那么您就错了。要么你的期望是错误的,要么你做错了什么。我们无法提供帮助,因为我们没有您的数据。
    • 所以现在我得到了匹配并传递数据,但得到了错误“数据异常未处理”dv(idx)("NAME") = row.Cells(2).Text
    • 这与本题无关。您提出的问题已得到解答,因此您应该接受该答案并继续前进。如果您还有其他问题,您应该将其发布在一个新线程中,并仅提供与该问题相关的所有信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多