如何在DataGridView中显示从服务器返回的xml

时间:2015-04-17 10:34:09

标签: c# xml rest datagridview

项目架构: WindowsForm - WCF服务 - SQLite数据库

目的: 我想要退回要求的汽车'详细信息从数据库,通过服务器(使用REST)到客户端的DataGridView。

问题: 目前我将XML字符串返回到一个文本框,其中包含我想要的详细信息......

<GetCarByIdResponse xmlns="http://tempuri.org/"><GetCarByIdResult>
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Car2" msdata:UseCurrentLocale="true">
<xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="Car2"><xs:complexType><xs:sequence>
<xs:element name="CarID" type="xs:long" minOccurs="0"/><xs:element name="Make" type="xs:string" minOccurs="0"/>
<xs:element name="Model" type="xs:string" minOccurs="0"/><xs:element name="Year" type="xs:long" minOccurs="0"/>
</xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType>    </xs:element></xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<DocumentElement xmlns=""><Car2 diffgr:id="Car21" msdata:rowOrder="0">    <CarID>2</CarID>
<Make>Toyota</Make><Model>Corolla</Model><Year>2007</Year></Car2>    </DocumentElement></diffgr:diffgram></GetCarByIdResult></GetCarByIdResponse>

但我无法找到将此信息放入DataGridView的方法。我没试过XMLReaderXDocumentdgCar.DataBind();。我对此非常陌生,所以任何指针都非常感激。在下面找到我的代码。提前谢谢。

服务器端代码:

 [OperationContract]
 [WebGet(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedResponse , UriTemplate = "/GetCarById/{value}")]
 DataTable GetCarById(string value);

//////////////////////////////////////

  public DataTable GetCarById(string value)
  {
      string connectionPath = @"Data Source=C:\SQLite\Car2.sqlite;Version=3;";
      SQLiteConnection connection = new SQLiteConnection(connectionPath);
      {
          connection.Open();

          string SQL = "SELECT * FROM Car2 where CarID =" + value;
          SQLiteCommand cmd = new SQLiteCommand();

          cmd.Connection = connection;
          cmd.CommandText = SQL;
          cmd.ExecuteNonQuery();

          SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
          DataTable dt = new DataTable("Car2");
          adapter.Fill(dt);

          return dt;

          connection.Close();

客户端代码:

private void btnGetCar_Click(object sender, EventArgs e)
{
    HttpClient client = new HttpClient();
    HttpResponseMessage wcfResponse = client.GetAsync("http://localhost:56328/Service1.svc/GetCarById/" + txtShowCarById.Text).Result;
    HttpContent stream = wcfResponse.Content;
    var data = stream.ReadAsStringAsync();

    txtRest.Text = data.Result;
}

1 个答案:

答案 0 :(得分:0)

您可以使用ReadXml methoddatatable的{​​{1}},然后将网格绑定到它。

dataset

您可以在以下链接中找到更多相关文档:

DataTable.ReadXml Method

DataSet.ReadXml Method