Search code examples
c#winformswcfwcf-data-services

how do you display xml data from wcf service in windows form app in datagridview or reportview?


I'm new to wcf and rest operations so any help would be great thank you.

How do i display information in a rdlc or a datagridview?

My Interface set up operation contract with a method called GetAllCustomer

namespace ConnectionToDatabase
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IGetCustomer" in both code and config file together.
    [ServiceContract]
    public interface IGetCustomer
    {
        [OperationContract]
        [WebInvoke(Method = "GET",
            ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped,
            UriTemplate = "xml/customers")]        
        List<Customer> GetAllCustomer();
    }
}

My customer class which implements interface class and connects to a sql database and returns a list of customer info

public class GetCustomer : IGetCustomer
    {
        public List<Customer> GetAllCustomer()
        {
            List<Customer> mylist = new List<Customer>();

            using (SqlConnection conn = new SqlConnection("Data Source=MATRIX\;Initial Catalog=******;Integrated Security=True"))
            {
                conn.Open();

                string cmdStr = String.Format("select * from CInformation c inner join EmploymentInformation e on c.CID = e.CID");
                SqlCommand cmd = new SqlCommand(cmdStr, conn);
                SqlDataReader rd = cmd.ExecuteReader();

                if (rd.HasRows)
                {
                    while (rd.Read())
                    {
                        mylist.Add(new Customer(rd["LastName"].ToString(), rd["FirstName"].ToString(), rd["MiddleName"].ToString(), rd["EmailAddress"].ToString(), rd["PhoneNumber"]));
                    }
                }
                conn.Close();
            }

            return mylist;
        }
    }

    [DataContract]
    public class Customer
    {
        [DataMember]
        public string lastname { get; set; }
        [DataMember]
        public string firstname { get; set; }
        [DataMember]
        public string middlename { get; set; }
        [DataMember]
        public string emailaddress { get; set; }
        [DataMember]
        public string phonenumber { get; set; }            
        public Customer(string last, string first, string middle, string email, string phone)
        {
            this.lastname = last;
            this.firstname = first;
            this.middlename = middle;
            this.emailaddress = email;
            this.phonenumber = phone;                
        }


    }//end of class

web config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>

    <services>
      <service name="ConnectionToDatabase.GetCustomer" behaviorConfiguration="EmpServiceBehaviour">
        <endpoint address ="" binding="webHttpBinding" contract="ConnectionToDatabase.IGetCustomer" behaviorConfiguration="web">
        </endpoint>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="EmpServiceBehaviour">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

windows form app

public Form1()
{
    InitializeComponent();
}

private void btnGetAllCustomers_Click(object sender, EventArgs e)
{
 WebRequest request = WebRequest.Create("http://localhost:52420/GetCustomer.svc/xml/customers");
        WebResponse ws = request.GetResponse();

        StreamReader responseStream = new StreamReader(ws.GetResponseStream());
        string response = responseStream.ReadLine();
        responseStream.Close();   
        textBox1.AppendText(response);
}  

right now it looks like this

in a textbox

<GetAllCustomerResponse xmlns="http://tempuri.org/"><GetAllCustomerResult xmlns:a="http://schemas.datacontract.org/2004/07/ConnectionToDatabase" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:Customer><a:firstname>Dog</a:firstname><a:lastname>Cat</a:lastname><a:middlename>up</a:middlename></a:Customer></GetAllCustomerResult></GetAllCustomerResponse>

Solution

  • You nee to like this

        using (nServiceReferenceCustomers.GetCustomerClient svc = new ServiceReferenceCustomers.GetCustomerClient())
        {
            XmlNode node = svc.GetAllCustomer();
            DataSet ds = new DataSet();
            using (XmlNodeReader reader = new XmlNodeReader(node))
            {
                ds.ReadXml(reader);
            }
    
    
            DataTable table = ds.Tables["Table"];
            DataRow row = table.Rows[0];
            string Lastname= (string) row["lastname"];
            string Firstname= (string) row["firstname"];
            string Middlename= (string) row["middlename "];
    string email= (string) row["emailaddress"];
    string Phone= (string) row["phonenumber"];
        }