【问题标题】:how to convert a datatable using a reference datatable asp.net如何使用参考数据表 asp.net 转换数据表
【发布时间】:2012-04-26 12:37:00
【问题描述】:

我发现使用参考数据表将数据表转换为新数据表有困难。我的问题很混乱,我不擅长解释,所以我画了一张照片(见下文)。

我在内存中有两个数据表,我需要使用第二个映射表创建第三个数据表以供参考。列名只是举例,不能硬编码。

希望有人可以帮助我。非常感谢。

【问题讨论】:

  • 您可以与这两个表建立关系,然后隐藏或删除列或更改列名
  • 谢谢,但我很难真正做到这一点..你能解释一下吗?

标签: asp.net vb.net datatable data-mapping datatable.select


【解决方案1】:

这可能不是最优化的代码,但它似乎工作......基本上使用映射表的“新列”列中的列名创建一个新的DataTable,然后对于第一个表中的每一行,遍历映射表,将“旧列”列的值存储在“新列”列中

Protected Sub MapData()

    Dim table1 = New DataTable()
    Dim table2 = New DataTable()
    Dim table3 = New DataTable()

    With table1
        .Columns.Add("Fore Name")
        .Columns.Add("Sir Name")
        .Columns.Add("Date of Birth")
        .Columns.Add("Country")

        Dim newRow = .NewRow()
        newRow("Fore Name") = "AA"
        newRow("Sir Name") = "AA"
        newRow("Date of Birth") = "01.01.1999"
        newRow("Country") = "UK"
        .Rows.Add(newRow)
        ' etc
    End With

    With table2
        .Columns.Add("Old Columns")
        .Columns.Add("New Columns")

        Dim newRow = .NewRow()
        newRow("Old Columns") = "Fore Name"
        newRow("New Columns") = "First Name"
        .Rows.Add(newRow)

        newRow = .NewRow()
        newRow("Old Columns") = "Sir Name"
        newRow("New Columns") = "Last Name"
        .Rows.Add(newRow)

        newRow = .NewRow()
        newRow("Old Columns") = "Date of Birth"
        newRow("New Columns") = "DOB"
        .Rows.Add(newRow)
    End With

    For Each rowData As DataRow In table2.Rows
        table3.Columns.Add(rowData("New Columns"))
    Next

    For Each table1Data As DataRow In table1.Rows
        Dim newRow = table3.NewRow()

        For Each rowMap As DataRow In table2.Rows
            newRow(rowMap("New Columns")) = table1Data(rowMap("Old Columns"))
        Next

        table3.Rows.Add(newRow)
    Next

End Sub

【讨论】:

  • 一瞬间,我想,,..又来了..硬编码列..现在我明白你只是为了完美..非常感谢..这个太棒了……
【解决方案2】:

试试这个,但这是在 c# 中,你可以将其转换为 vb

targetTable.Columns["forename"].Caption = "First Name";// Rename the column
targetTable.Columns["SirName"].Caption = "Last Name";// Rename the column
targetTable.Columns["DateofBirth"].Caption = "DOB";// Rename the column
targetTable.Columns["country"].Table.Columns.Remove("country");//this will remove the column

//reorder column in case you need it
// targetTable.Columns["First Name"].SetOrdinal(0);
// targetTable.Columns["Last Name"].SetOrdinal(1);
// targetTable.Columns["DOB"].SetOrdinal(2);

// newtable =targettable.copy();// this will copy everthing to newtable  

如果没有帮助请告诉我

【讨论】:

  • 感谢您的帮助,但是 .. 抱歉 .. 我做不到 .. 我无法知道数据表中的内容,所以我无法对这样的列进行硬编码。 .我唯一可以确定的是..在映射表中,第一列是第一个表中的列,第二列是我要生成的表的列..
  • 你也可以使用 targettable.columns[0].caption="First Name"; //通过索引
猜你喜欢
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 2015-07-21
相关资源
最近更新 更多