Here is the service Interface for the service which queries Shows for a particular venue. It includes a data contract for for a class that allows us to combine fields from Show and ShowData.
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService" in both code and config file together. [ServiceContract] public interface IService { [OperationContract] List<ShowInfo> GetShowsByVenue(string venueName); } [DataContract] public class ShowInfo { [DataMember] public string ArtistName { get; set; } [DataMember] public string ShowName { get; set; } [DataMember] public string ShowDate { get; set; } [DataMember] public string ShowTime { get; set; } [DataMember] public string TicketInfo { get; set; } }
Here is the code for the query itself
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service" in code, svc and config file together. public class Service : IService { ShowTrackerEntities db = new ShowTrackerEntities(); public List<ShowInfo> GetShowsByVenue(string venueName) { var shws = from s in db.Shows from d in s.ShowDetails where s.Venue.VenueName.Equals(venueName) select new { d.Artist.ArtistName, s.ShowName, s.ShowTime, s.ShowDate, s.ShowTicketInfo }; List<ShowInfo> shows = new List<ShowInfo>(); foreach(var sh in shws) { ShowInfo sInfo = new ShowInfo(); sInfo.ArtistName = sh.ArtistName; sInfo.ShowName = sh.ShowName; sInfo.ShowDate = sh.ShowDate.ToShortDateString(); sInfo.ShowTime = sh.ShowTime.ToString(); shows.Add(sInfo); } return shows; } }
Now here is the ASP code for the simple web page client. We first had to make a reference to the service. Also we used a text box to enter the venue name. It should be a drop down list.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:GridView ID="GridView1" runat="server"></asp:GridView> <asp:Button ID="Button1" runat="server" Text="Get Shows" OnClick="Button1_Click" /> </div> </form> </body> </html>
And here is the code behind
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { //Instantiate the service client so we have access to the serivce ServiceReference1.ServiceClient sc = new ServiceReference1.ServiceClient(); //create an array and assign it the result of the service query ServiceReference1.ShowInfo[] shows = sc.GetShowsByVenue(TextBox1.Text); //bind the array to the DataGrid GridView1.DataSource = shows; GridView1.DataBind(); } }