VB.Net 将简单的 xml 文件加载到 DataTable

问题描述 投票:0回答:1

我无法让 vb.net 将 xml 文件加载到数据表中以在 datagridview 和其他文本元素中使用。我已经尝试了过去两天搜索中能找到的大部分解决方案,但似乎没有任何效果。据我所知,这应该只是一个简单的

DataSource.ReadXML
命令,但是当我执行此操作然后设置 DataGridVew1 数据源时,什么也没有显示。我尝试了多种读取数据表和数据源的组合,但都无法工作。

我不确定这里正确的方法是什么。我应该在数据集或数据表中使用“ReadXML”吗?如果我读入数据集,数据如何进入正确的表?现在我只使用 1 个表,但一旦我弄清楚了这一点,我将需要从多个不同的 xml 文件中读取数据并将它们放入不同的 DataTable 中。

这是我正在使用的 xml 文件的示例。我缩短了它,因为文档中有大约 100 条记录。这个 xml 文件是在 Excel 中生成的,以节省输入所有内容的时间:

<?xml version="1.0" encoding="utf-8" ?>
<BlankData  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <record>
        <SizeNum>#1 - 45</SizeNum>
        <Height>8</Height>
        <Top>3</Top>
        <Bottom>7.75</Bottom>
        <Weight>0</Weight>
        <TrimmedWeight>0</TrimmedWeight>
        <Wrap>false</Wrap>
    </record>
    <record>
        <SizeNum>#1 - 90</SizeNum>
        <Height>8</Height>
        <Top>1.75</Top>
        <Bottom>11.25</Bottom>
        <Weight>0</Weight>
        <TrimmedWeight>0</TrimmedWeight>
        <Wrap>false</Wrap>
    </record>
    <record>
        <SizeNum>#10 - 45 </SizeNum>
        <Height>20</Height>
        <Top>4.875</Top>
        <Bottom>16.75</Bottom>
        <Weight>0</Weight>
        <TrimmedWeight>0</TrimmedWeight>
        <Wrap>false</Wrap>
    </record>
    <record>
        <SizeNum>#10 - 90 </SizeNum>
        <Height>14</Height>
        <Top>1.125</Top>
        <Bottom>19.5</Bottom>
        <Weight>0</Weight>
        <TrimmedWeight>0</TrimmedWeight>
        <Wrap>false</Wrap>
    </record>
    <record>
        <SizeNum>#11 - 45 </SizeNum>
        <Height>23</Height>
        <Top>6</Top>
        <Bottom>21.375</Bottom>
        <Weight>0</Weight>
        <TrimmedWeight>0</TrimmedWeight>
        <Wrap>false</Wrap>
    </record>
</BlankData>

我通过添加新的 xml 文件项并将其命名为 BlankData 来将此 xml 文件添加到项目中。还有一个名为 PressData 的数据源和一个名为 BlankData 的表,它有 7 列,其名称与上面的 xml 示例相匹配。不确定让 ml 文件和数据表共享相同的名称是否正确,在这次迭代之前,我对 xml 文件和表名有不同的名称,但我无法让它工作,所以我决定尝试给它们提供相同的名称

我厌倦了使用下面的代码将 xml 加载到数据源

PressData.ReadXml(My.Application.Info.DirectoryPath & "\BlankData.xml")
DataGridView1.DataSource = PressData

这会导致一个空白的数据网格视图框

并且厌倦了使用此代码将 xml 加载到数据源内的数据表

PressData.BlankData.ReadXml(My.Application.Info.DirectoryPath & "\BlankData.xml")
DataGridView1.DataSource = PressData.BlankData

这会导致 datagridview 显示 7 列,但没有行数据。

我尝试了一些其他的小改变,但我无法开始工作。有人对尝试什么有什么建议吗? 正如我之前所说,这看起来应该很简单,但我所做的一切似乎都对结果没有任何影响,这只是上面两种情况之一。

我的 xml 文件是否有问题?

感谢您的帮助!

达里安

xml vb.net datatable datasource readxml
1个回答
0
投票

这是一个例子。首先是你的数据。

    Dim xe As XElement
    xe = <BlankData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
             <record>
                 <SizeNum>#1 - 45</SizeNum>
                 <Height>8</Height>
                 <Top>3</Top>
                 <Bottom>7.75</Bottom>
                 <Weight>0</Weight>
                 <TrimmedWeight>0</TrimmedWeight>
                 <Wrap>false</Wrap>
             </record>
             <record>
                 <SizeNum>#1 - 90</SizeNum>
                 <Height>8</Height>
                 <Top>1.75</Top>
                 <Bottom>11.25</Bottom>
                 <Weight>0</Weight>
                 <TrimmedWeight>0</TrimmedWeight>
                 <Wrap>false</Wrap>
             </record>
             <record>
                 <SizeNum>#10 - 45 </SizeNum>
                 <Height>20</Height>
                 <Top>4.875</Top>
                 <Bottom>16.75</Bottom>
                 <Weight>0</Weight>
                 <TrimmedWeight>0</TrimmedWeight>
                 <Wrap>false</Wrap>
             </record>
             <record>
                 <SizeNum>#10 - 90 </SizeNum>
                 <Height>14</Height>
                 <Top>1.125</Top>
                 <Bottom>19.5</Bottom>
                 <Weight>0</Weight>
                 <TrimmedWeight>0</TrimmedWeight>
                 <Wrap>false</Wrap>
             </record>
             <record>
                 <SizeNum>#11 - 45 </SizeNum>
                 <Height>23</Height>
                 <Top>6</Top>
                 <Bottom>21.375</Bottom>
                 <Weight>0</Weight>
                 <TrimmedWeight>0</TrimmedWeight>
                 <Wrap>false</Wrap>
             </record>
         </BlankData>

然后创建数据集并读取 XML。没有表名。

    Dim ds As New DataSet()
    ds.ReadXml(xe.CreateReader)
    Debug.WriteLine(ds.Tables(0).TableName) '<<<<<<<<<<<<<<<<<<<<<<<

然后将其中唯一的表分配给DataGridView

    DataGridView1.DataSource = ds.Tables(0)
© www.soinside.com 2019 - 2024. All rights reserved.