Follow me on Twitter at Twitter.com/wbm
FYI, I'm blogging most of my stuff over at More Wally now.
You might want to add my rss feed to your reader at:http://morewally.com/cs/blogs/wallym/rss.aspx
ASP.NET Podcast Show #114 - ADO.NET Data Services in .NET 3.5 Service Pack 1 Beta1 with ASP.NET AJAX - Wallace B. McClure

Wallace B. McClure

All About Wally McClure - The musings of Wallym on MonoTouch for iPhone, MonoDroid for Android, and Windows Azure.

News

Personal Blog

Work Blog

.NET

Book Authors

Business

Family

Friends

Georgia Tech Bloggers

Personal

Archives

ASP.NET Podcast Show #114 - ADO.NET Data Services in .NET 3.5 Service Pack 1 Beta1 with ASP.NET AJAX

Subscribe to everything.

Original Url: http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/05/31/asp-net-podcast-show-114-ado-net-data-services-in-net-3-5-service-pack-1-beta1-with-asp-net-ajax.aspx 

Subscribe to WMV.

Subscribe to M4V for iPod.

Subscribe to MP3.

Download WMV.

Download W4V for iPod.

Download MP3.

Show Notes:

  • ADO.NET Data Services Viewing DataSql Server Database .
  • ADO.NET Data Services.
  • Javascript.
  • No SQL.
  • Getting data.
  • Insert a record.
  • Update a record.
  • Metadata.
  • I had a snafu while recording, so some audio may sound clipped.

Source Code:

ADO.NET Data Services Editing Data<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory" Service="OrderItemDataService" %>

Codebehind file:

using System;

using System.Data.Services;

using System.Collections.Generic;

using System.Linq;

using System.ServiceModel.Web;

 

public class OrderItemDataService : DataService< ADONETDataServicesModel.ADONETDataServicesEntities >

{

    // This method is called only once to initialize service-wide policies.

    public static void InitializeService(IDataServiceConfiguration config)

    {

        // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.

        // For testing purposes use "*" to indicate all entity sets/service operations.

        // "*" should NOT be used in production systems.

        // Example for entity sets (this example uses "AllRead" which allows reads but not writes)

        // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);

        config.SetEntitySetAccessRule("*", EntitySetRights.All);

        config.UseVerboseErrors = true;

        //config.SetEntitySetAccessRule("tbOrder", EntitySetRights.All);

        // Example for service operations

        // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);

  }

 

    // Query interceptors, change interceptors and service operations go here

}

Display Data:

<script language="javascript" type="text/javascript">

function pageLoad()

{

    var strOut;

    var Service = GetDataService();

 

    var QueryString = "/tbOrder";

    Service.query(QueryString, OnCompleteSuccess, OnCompleteFailure);

}

function GetDataService()

{

    return(new Sys.Data.DataService("WebDataService.svc"));

}

function OnCompleteSuccess(result) {

    var strReturn = "<br />";

    var Output = "On Complete Success Called." + strReturn;

    var i = 0;

    for (m in result)

    {

        Output += m + strReturn;

    }

 

    for (m in result[0]) {

        Output += m + strReturn;

    }

 

    Output += "<table>";

    Output += "<tr><th>Total Amount</th>" +

              "<th>Date of Order</th>" +

              "<th>Comment</th>" +

              "<th>Customer Name</th>" +

              "<th>Edit</th>" +

              "</tr>";

    for (i=0; i< result.length; i++)

    {

        Output += "<tr>" +

            "<td>" + result[i].TotalAmount + "</td>" +

            "<td>" + result[i].DateOrdered + "</td>" +

            "<td>" + result[i].Comment + "</td>" +

            "<td>" + result[i].CustomerName + "</td>" +

            "<td><a href='EditOrder.aspx?OrderID=" + result[i].OrderId + "'>Edit</td>" +

            "</tr>";

    }

    Output += "</table>";

    $get("OutputDiv").innerHTML = Output;

}

 

function OnCompleteFailure(result)

{

    alert("On Complete Failure Called.");

}

Add/Edit/Delete file:

        var OrderID=<%=Request.QueryString["OrderID"] %>;

       

        function pageLoad() {

            FillOrderData();

        }

        function FillOrderData()

        {

            var Service = GetDataService();

            var QueryString = "tbOrder(" + OrderID + ")?$expand=tbItem";

            Service.query(QueryString, OnCompleteSuccess, OnCompleteFailure);

        }

        function GetDataService()

        {

            return(new Sys.Data.DataService("OrderItemDataService.svc"));

        }

        function OnCompleteSuccess(result)

        {

            var i = 0;

            var Output = "<table><tr><th>Part</th><th>Price</th>" +

                "<th>Edit</th><th>Delete</th></tr>";

            for(i = 0; i < result.tbItem.length; i++)

            {

                Output += "<tr><td>" + result.tbItem[i].Part +

                    "</td><td>" + result.tbItem[i].Price + "</td>" +

                    "<td><a href='javascript:EditItem(" + result.tbItem[i].ItemId + ")'>Edit</a></td>" +

                    "<td><a href='javascript:DeleteItem(" + result.tbItem[i].ItemId + ")'>Delete</a></td>" +

                    "</tr>";

            }

            Output += "</table>";

            $get("OutputGrid").innerHTML = Output;

        }

       

        function OnCompleteFailure(result)

        {

            alert("OnCompleteFailure called.");

        }

       

        function DeleteItem( ItemId )

        {

            var Service = GetDataService();

           

            if ( window.confirm("Do you really want to delete this Item?" ) )

            {

                alert("Delete it.");

                Service.remove(null, "tbItem(" + ItemId + ")",

                    DeleteItemSucceed, DeleteItemFailure);

            }

        }

       

        function DeleteItemSucceed( result )

        {

            FillOrderData();

            alert("DeleteItemSucceed called.");

        }

       

        function DeleteItemFailure( result )

        {

            alert("DeleteItemFailure called.");

        }

       

        function EditItem( ItemId )

        {

            var Service = GetDataService();

            var QueryString = "tbItem(" + ItemId + ")";

            Service.query(QueryString, EditItemSucceed, EditItemFailure);

        }

       

        function EditItemSucceed( result )

        {

            $get("txtPrice").value = result.Price;

            $get("txtPart").value = result.Part;

            $get("hdItemId").value = result.ItemId;

            $get("OutputSpecifics").style.visibility = "visible";

            $get("OutputGrid").style.visibility = "hidden";

            FillOrderData();

        }

       

        function EditItemFailure( result )

        {

            alert("EditItemFailure called.");

        }

       

        function SaveItem()

        {

            var ThisItemId = $get("hdItemId").value;

            var Service = GetDataService();

           

            if (ThisItemId == "" )

            {

                var newProduct =

                {

                    Price:      $get("txtPrice").value,

                    Part:       $get("txtPart").value,

                    tbOrder:    { __metadata: {uri: "/tbOrder(" + OrderID + ")" }}

                };

                Service.insert(newProduct, "tbItem", InsertItemSucceed, InsertItemFailed);

            }

            else{

                var updateProduct=

                {

                    ItemId:     $get("hdItemId").value,

                    Price:      $get("txtPrice").value,

                    Part:       $get("txtPart").value,

                    tbOrder:    { __metadata: {uri: "/tbOrder(" + OrderID + ")" }}

                    //$get("hdOrderId").value

                }

                Service.update(updateProduct, "tbItem(" + $get("hdItemId").value + ")", UpdateItemSucceed, UpdateItemFailed, updateProduct);

            }

        }

        function InsertItemSucceed(result)

        {

            alert("InsertItemSucced called.");

            FillOrderData();

        }

        function InsertItemFailed(result)

        {

            alert("InsertItemFailed called.");

        }

        function UpdateItemSucceed(result)

        {

            alert("UpdateItemSucceed called.");

        }

        function UpdateItemFailed(result)

        {

            alert("UpdateItemFailed called.");

        }

        function BeginAdd()

        {

            $get("OutputGrid").style.visibility = "hidden";

            $get("OutputSpecifics").style.visibility = "visible";

            $get("txtPrice").value = "";

            $get("txtPart").value = "";

            $get("hdItemId").value = "";

        }

Comments

Rajat said:

Hi,

I did same what ever you suggest here.

by doing this way i am able to show the data.but

not able to insert or update i got error

"Sys.Net.WebServicesFailedException: The server method 'insert' returned invalid data. The 'd' property is missing from the Json Wrapper"

I tried but the problem is not resolved

can you please give me suggestion.

thanks in Advance.

Rajat

# December 15, 2008 12:03 AM
Leave a Comment

(required) 

(required) 

(optional)

(required)