我正在尝试使用动态DataGridView
文件填充XML
(由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列,受“记录”的限制key(我的意思是,当程序到达它时应创建一个新行,因为它是另一个请求)
更新
使用以下代码取得了一些进展:
foreach (XElement e in xml.Root.Descendants("parameter"))
dataGridView1.Columns.Add("", e.Element("name").Value);
现在,我该如何限制列?或者也许只选择我需要的列来显示它复制每个“参数”节点的列(如workorderid,requester,createdby,...,workorderid,requester,createdby,...) 另外,我需要添加行(当然),这将是元素“值”(而不是“名称”)
再次感谢!
答案 0 :(得分:0)
我认为您的问题是如何将 name / value cloumn转换为自定义cloumns和动态泛型所有列到DataGridView。
如果 dataSet.ReadXml 方法将从数据表中返回一个 workorderid 信息块,您可以自己创建DataGridView,创建DataGridView实例,编写列标题,按 grid.Rows.Add(xxx)写入所有行。如果您想获取代码详细信息,请从vs designer中添加列,然后检查MainForm.designer.cs,获取代码并填写代码,这非常简单。如果您有其他问题,请对我的帖子发表评论。
有关更新
首先,创建列列以缓存所有不同列的名称。在您的情况下,如果每个工作订单的列都相同,则更新代码可以在一个记录节点中运行并运行。否则,您需要通过 foreach 所有“参数”节点。之后,您可以选择所需的列并添加它们。如果要添加行,只需添加到缓存中,并在不重复时添加到网格中。