使用c#用XML填充DataGridView

本文关键字:填充 DataGridView XML 使用 | 更新日期: 2023-09-27 18:17:34

我正试图用动态XML文件填充DataGridView(由API响应生成-从ServiceDesk Plus,如果它重要的话)来自系统的API我正在使用以下格式回复XML:

<API version="1.0">
  <response>
     <operation name="GET_REQUESTS">
        <result>
          <statuscode>200</statuscode>
          <status>Success</status>
          <message>WorkOrder Details Retrieved Successfully</message>
        </result>
        <Details type="GET_REQUESTS">
           <record URI="http://<myapiurl>/<workorderid>">
              <parameter>
                 <name>workorderid</name>
                 <value>01</value>
              </parameter>
              <parameter>
                 <name>requester</name>
                 <value>Some requester</value>
              </parameter>
              <parameter>
                 <name>createdby</name>
                 <value>Some technician</value>
              </parameter>
              <parameter>
                 <name>createdtime</name>
                 <value>1401967616186</value>
              </parameter>
              ...
              ...
            </record>
            <record URI="http://<myapiurl>/<workorderid>">
              <parameter>
                 <name>workorderid</name>
                 <value>02</value>
              </parameter>
              <parameter>
                 <name>requester</name>
                 <value>Another requester</value>
              </parameter>
              <parameter>
                 <name>createdby</name>
                 <value>Another technician</value>
              </parameter>
              <parameter>
                 <name>createdtime</name>
                 <value>1401967616180</value>
              </parameter>
              ...
              ...
            </record>
         </Details>
     </operation>
  </response>
</API>
到目前为止,我能够使用以下代码填充DataGridView:
DataSet dataSet = new DataSet();
dataSet.ReadXml(@"http://<myapiurl>/<post parameters>");
dataGridView1.DataSource = dataSet.Tables[6];

对,很简单。

但是结果在DataGridView中是这样显示的:

name            value
workorderid     01
requester       Some requester
createdby       Some technician
createdtime     1401967616186
...             ...
...             ...
workorderid     02
requester       Another requester
createdby       Another technician
createdtime     1401967616180
...             ...
...             ...

我需要它们像这样显示:

workorderid    requester            createdby            createdtime      ...    ...
01             Some requester       Some technician      1401967616186    ...    ...
02             Another requester    Another technician   1401967616180    ...    ...

我是c#编程的初学者(也是一般编程),所以如果答案在我面前,请原谅我。我试图建立一个Winform,所以用户从我的工作将能够看到他们的待定的帮助台请求,但我不知道如何使每个"名称"键成为一个DataGridView列,受限于"记录"键(我的意思是,当程序到达它应该创建一个新的行,因为它是另一个请求)

通过使用以下代码获得了一些进展:

foreach (XElement e in xml.Root.Descendants("parameter"))
  dataGridView1.Columns.Add("", e.Element("name").Value);

现在,我如何限制列呢?或者可能只选择我需要显示的列,它复制每个"参数"节点的列(如workorderid, requester, createdby,…), workorderid, request, createby,…)此外,我需要添加行(当然),这将是元素"value"(而不是"name")

再次感谢!

使用c#用XML填充DataGridView

我认为你的问题是如何更改名称/值字段自定义字段和动态通用的所有列到DataGridView。

数据集。ReadXml方法将从数据表中返回一块workorderid信息,您可以自己创建DataGridView,创建DataGridView实例,编写列头,通过grid.Rows.Add(xxx)编写所有行。如果你想获得代码细节,从vs designer中添加列,然后检查MainForm.designer.cs,得到代码并填写你的代码,这很容易。如果你有其他问题,请在我的帖子下评论。

为更新

首先,创建一个List columns来缓存所有不同列的名称。在您的示例中,如果每个工作订单的列都相同,则更新代码只能在一个记录节点中工作和运行。否则,您需要通过foreach所有"parameter"节点。之后,您可以选择所需的列并添加它们。当您想要添加一行时,只需添加到缓存中,并在不重复时添加到网格中。