【问题标题】:Returns one XML row only from odata webservice to datagridview仅将一个 XML 行从 odata webservice 返回到 datagridview
【发布时间】:2016-02-12 01:38:20
【问题描述】:

这是我必须从 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();

    }
  }
}

【问题讨论】:

    标签: c# xml winforms web-services datagridview


    【解决方案1】:

    由于您使用的是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;
    

    【讨论】:

    • 这引发了 sourcetable.Rows.Add(dr.ItemArray); 的异常。对象引用未设置为对象的实例。
    • OdataIII.exe 中出现“System.NullReferenceException”类型的未处理异常附加信息:对象引用未设置为对象的实例。
    • 你定义了sourcetable吗?如果您在调试器中检查它,它是否为空?还是其他什么都为空?
    • 嗨 Roman 我已经更新了我的代码,似乎 ds.readxml() 出现错误
    • ds 在我通过调试器运行时为空
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多