【问题标题】:VB.NET DataGrid Column BindingVB.NET DataGrid 列绑定
【发布时间】:2020-05-15 21:05:39
【问题描述】:

试图弄清楚如何为 XML 子节点的 vb.net 数据网格控件设置映射名称。数据源是使用...建立的。

VB.NET代码建立数据源
dim ds as new DataSet()
ds.ReadXML(New System.IO.StringReader(xmlString))
DataGridView1.DataSource = ds
DataGridView1.DataMember = "task"

只要它们位于任务节点的正下方,我就可以映射下面 XML 字符串中的大多数节点,但是找不到将 client > clientname 映射到列的方法。

如果节点org > orgname 不匹配company namesubstatus > substatus 不匹配not startedin progress,还需要弄清楚如何以编程方式从数据源中删除任何行。

XML 字符串
<imsapi>
<status>0</status>
<statusmessage>Login OK</statusmessage>
<zoneresponse>
<tasks>
    <task>
        <contact>
            <surname>Last Name</surname>
            <givennames>First Name</givennames>
            <userid>JScqTyVQXFwgCg==</userid>
        </contact>
        <contactname>User Name</contactname>
        <org>
            <orgid>JScqTyVRXFQgCg==</orgid>
            <orgname>Business Unit Name</orgname>
        </org>
        <requestdatetime>2019/06/26 08:56:09</requestdatetime>
        <status>Not Started</status>
        <readtaskdatetime>2019/07/04 12:44:08</readtaskdatetime>
        <description>Job description goes here...</description>
        <custon>INTERNAL</custon>
        <duedate>2020/01/13</duedate>
        <lastupdated>2020/01/06</lastupdated>
        <jobnumber>2387</jobnumber>
        <duedatetime>2020/01/13 00:00:00</duedatetime>
        <client>
            <clientid>JScqTyVRXFQgCg==</clientid>
            <clientname>Client Name</clientname>
        </client>
        <taskname>Job Name</taskname>
        <taskid>JiYqUyVRPEslCg==</taskid>
        <lastupdateddatetime>2020/01/06 10:39:44</lastupdateddatetime>
        <requestdate>2019/06/26</requestdate>
        <tasktype>Manufacturing Order</tasktype>
        <substatus>
            <substatusid>IyZaVywK</substatusid>
            <substatus>Not Started</substatus>
        </substatus>
    </task>
  </tasks>
</zoneresponse>

我曾尝试使用./\ 尝试映射到子节点,但这些都没有生成映射。

【问题讨论】:

  • ReadXml 方法将不起作用。一旦超过 4 个级别的标签,数据集就会变得支离破碎,无法重新组合在一起。最好尝试使用 Xml Linq (XDocument) 执行此操作。我可以帮忙,但需要知道公司名称在哪里?
  • 公司名称为task &gt; org &gt; orgname,子状态为task &gt; substatus &gt; substatus 谢谢。

标签: xml vb.net datagridview datasource


【解决方案1】:

有点复杂,因为有两个嵌套标签“substatus”。

Imports System.Xml
Imports System.Xml.Linq
Imports System.IO
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim xml As String = File.ReadAllText(FILENAME)
        Dim doc As XDocument = XDocument.Parse(xml)


        Dim business As String = "Business Unit Name"
        Dim removeTypes() As String = {"Not Started", "In Progress"}

        Dim removeItem As List(Of XElement) = doc.Descendants("task") _
                                        .Where(Function(x) (CType(x.Descendants("orgname").FirstOrDefault(), String) <> business) Or (Not x.Descendants("substatus").Any(Function(y) removeTypes.Contains(CType(y, String))))) _
                                        .ToList()

        For i = removeItem.Count - 1 To 0 Step -1
            removeItem(i).Remove()
        Next i


    End Sub

End Module

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2013-08-06
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多