VB. NET Привязка столбцов DataGrid - PullRequest
0 голосов
/ 30 января 2020

Попытка выяснить, как настроить имя отображения для vb. net элемент управления сеткой данных для подузла XML. Источник данных устанавливается с использованием ...

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 name и substatus > substatus не соответствует not started или in progress.

XML String
<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>

Я пытался использовать ., / и \ чтобы попытаться сопоставить с узлом, но ни один из них не создал карту.

1 Ответ

0 голосов
/ 30 января 2020

Это немного сложно, потому что есть два вложенных тега "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
...