【发布时间】:2011-12-18 18:56:25
【问题描述】:
我正在尝试读取一个简单的 Web 服务 (REST) 并在我的 C# 桌面应用程序中填充一个下拉框。我正在使用 .net 2.0
以下是我的 web 服务返回 xml
<sections type="array">
<section>
<name>Standing</name>
<created-at type="datetime">2011-10-23T23:17:54+05:30</created-at>
<updated-at type="datetime">2011-10-23T23:17:54+05:30</updated-at>
<id type="integer">1</id>
<status type="integer">1</status>
<service-charge type="float">0.0</service-charge>
</section>
<section>
<name>VIP</name>
<created-at type="datetime">2011-10-30T11:27:05+05:30</created-at>
<updated-at type="datetime">2011-10-30T11:27:05+05:30</updated-at>
<id type="integer">2</id>
<status type="integer">1</status>
<service-charge type="float">10.0</service-charge>
</section>
在下面的代码中,我试图将 xml 文档转换为数据表
public DataTable getSections() {
String url = "http://<site_url>/sections.xml";
DataTable t = new DataTable();
HttpHandler handle = new HttpHandler();
StreamReader sr = handle.executeGET(url);
String xml = "";
while (sr.Peek() >= 0)
{
xml += sr.ReadLine();
}
XmlDataDocument doc = new XmlDataDocument();
doc.LoadXml(xml);
XmlReader xmlReader = new XmlNodeReader(doc);
DataSet ds = new DataSet();
ds.ReadXml(xmlReader);
t = ds.Tables[0];
return t;
}
在最后一段中,我试图将它绑定到我的下拉框 (cmbSections)
DataTable t = sec.getSections();
cmbSections.DataSource = t;
cmbSections.DisplayMember = "name";
cmbSections.ValueMember = "id";
但我收到以下错误
Cannot bind to the new display member.
Parameter name: newDisplayMember
我在这里缺少什么,请帮忙,我是 C# 世界的新手
【问题讨论】:
-
如果你在getSections的返回行下一个断点,你在DataSet中看到了什么?
-
你有源 xml 的架构吗?
-
嗨 Sq33G,我想我得到了一些值,但不知道如何调试,但是当我使用 't.GetType();'我得到 {System.Data.DataTable} 作为输出,有什么特殊的部分我应该看,谢谢你的回答
-
嗨 curtisk,我不确定你对源 xml 架构的要求是什么,你能解释一下吗,谢谢
-
@sameera207,当然。
GetType()is inherited fromobject。您需要学习和理解您正在使用的 API。查看DataTable上的Rows和Columns集合以回答@sq33G 的问题。
标签: c# .net xml web-services