仅从odata webservice返回一行XML行到datagridview

时间:2016-02-12 01:38:20

标签: c# xml winforms web-services datagridview

以下是我必须从Web服务获取XMl的代码,然后我尝试将其绑定到datagridview,但我只能获得一行。

    public  void CreateObject()
    {
          const string ServerURl = "http://services.odata.org/AdventureWorksV3/AdventureWorks.svc/ProductCatalog";
        HttpWebRequest request = WebRequest.Create(ServerURl) as HttpWebRequest;
        request.ContentType = "application/atom+xml";
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            ds.ReadXml(response.GetResponseStream());
            dataGridView1.DataSource = ds.Tables[0];
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        CreateObject();
        dataGridView1.DataSource = ds.Tables[0];
    }

我不确定我错过了什么,它在winform应用程序中

这是在Roman的建议之后更新的代码,似乎在ds.readxml上抛出异常

using System;
using System.Data;
using System.Windows.Forms;
using System.Net;

namespace Odata4
{
 public partial class Form1 : Form
 {

    public DataSet ds;
    public DataTable sourcetable;
    public Form1()
    {
        InitializeComponent();
    }

    public void CreateObject()
    {
        const string ServerURl = "http://services.odata.org/AdventureWorksV3/AdventureWorks.svc";
        HttpWebRequest request = WebRequest.Create(ServerURl) as HttpWebRequest;
        request.ContentType = "application/atom+xml";
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            ds.ReadXml(response.GetResponseStream());

            foreach (DataTable table in ds.Tables)
            {
                foreach (DataRow dr in table.Rows)
                {
                    sourcetable.Rows.Add(dr.ItemArray);
                }
            }

            dataGridView1.DataSource = sourcetable;

        }

    }

    private void button1_Click(object sender, EventArgs e)
    {
        CreateObject();

    }
  }
}

1 个答案:

答案 0 :(得分:3)

由于您正在使用ds.Tables[0],因此您只能获得DataSet的第一个条目。尝试循环表并将结果添加到一个DataTable,这将是您的源表。

foreach (DataTable table in ds.Tables)
{
    foreach (DataRow dr in table.Rows)
    {
        sourcetable.Rows.Add(dr.ItemArray);
    }
}

dataGridView1.DataSource = sourcetable;