none
MSDN的教程代码疑问:如何将数据服务数据绑定到控件http://msdn.microsoft.com/zh-cn/library/ee681614(v=VS.95).aspx RRS feed

  • 问题

  • 我按照http://msdn.microsoft.com/zh-cn/library/ee681614(v=VS.95).aspx  这个教程,建好好,编译运行OK,但是我发现改变要查询的CustomerID时候,例如改成一个明明不存在的ID:1234,但是结果还是原来那个数据集。这是什么原因呢?如果我刷新的浏览器,再输入1234,就返回正确的空的结果集。

    调试代码发现Linq也是对的

              var query = from orderByCustomer in context.Orders
                            where orderByCustomer.Customers.CustomerID == this.customerId.Text//能够正确获取1234
                            select orderByCustomer;

    但是就是当你改变要查询的CustomerID时,返回的还是原来的数据。请问这是什么原因。?

    2011年5月13日 11:08

答案

  • 你好,

    这有可能是浏览器缓存问题。

    你试一下先输入正确的ID,按下“getCustomerOrders” 按钮,然后按一下 F12 -> 缓存菜单 -> 清除浏览器缓存 (Ctrl + R). 然后你输入1234,再按下“getCustomerOrders” 按钮看看是否是返回原来的结果集。

     

    你尝试一下把MainPage_Loaded事件里的以下代码放在getCustomerOrders_Click事件里面:

        // Initialize the binding collection.
        trackedOrders = new DataServiceCollection<Orders>();

        // Define a handler for the LoadCompleted event of the binding collection.
        trackedOrders.LoadCompleted +=
            new EventHandler<LoadCompletedEventArgs>(trackedOrders_LoadCompleted);

     

    最后变成这样:

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        // Initialize the data service context.
        context =
            new NorthwindEntities(new Uri("Northwind.svc", UriKind.Relative));

    }

    private void getCustomerOrders_Click(object sender, RoutedEventArgs e)
    {
        // Reset the grids.
        detailsGrid.DataContext = null;
        ordersGrid.DataContext = null;

        //detailsGrid.SelectedIndex = 0;
        LayoutRoot.UpdateLayout();


        // Define a query that returns order and related items for a give customer.
        var query = from orderByCustomer in context.Orders
                    where orderByCustomer.Customers.CustomerID == this.customerId.Text
                    select orderByCustomer;

        // Initialize the binding collection.
        trackedOrders = new DataServiceCollection<Orders>();

       // Define a handler for the LoadCompleted event of the binding collection.
       trackedOrders.LoadCompleted +=
            new EventHandler<LoadCompletedEventArgs>(trackedOrders_LoadCompleted);


        // Asynchronously load the result of the query.
        trackedOrders.LoadAsync(query);

        // Disable the button until the loading is complete.
        getCustomerOrders.IsEnabled = false;
    }


    Daoping Liu - MSFT
    2011年5月16日 3:02
    版主

全部回复

  • 你好,

    这有可能是浏览器缓存问题。

    你试一下先输入正确的ID,按下“getCustomerOrders” 按钮,然后按一下 F12 -> 缓存菜单 -> 清除浏览器缓存 (Ctrl + R). 然后你输入1234,再按下“getCustomerOrders” 按钮看看是否是返回原来的结果集。

     

    你尝试一下把MainPage_Loaded事件里的以下代码放在getCustomerOrders_Click事件里面:

        // Initialize the binding collection.
        trackedOrders = new DataServiceCollection<Orders>();

        // Define a handler for the LoadCompleted event of the binding collection.
        trackedOrders.LoadCompleted +=
            new EventHandler<LoadCompletedEventArgs>(trackedOrders_LoadCompleted);

     

    最后变成这样:

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        // Initialize the data service context.
        context =
            new NorthwindEntities(new Uri("Northwind.svc", UriKind.Relative));

    }

    private void getCustomerOrders_Click(object sender, RoutedEventArgs e)
    {
        // Reset the grids.
        detailsGrid.DataContext = null;
        ordersGrid.DataContext = null;

        //detailsGrid.SelectedIndex = 0;
        LayoutRoot.UpdateLayout();


        // Define a query that returns order and related items for a give customer.
        var query = from orderByCustomer in context.Orders
                    where orderByCustomer.Customers.CustomerID == this.customerId.Text
                    select orderByCustomer;

        // Initialize the binding collection.
        trackedOrders = new DataServiceCollection<Orders>();

       // Define a handler for the LoadCompleted event of the binding collection.
       trackedOrders.LoadCompleted +=
            new EventHandler<LoadCompletedEventArgs>(trackedOrders_LoadCompleted);


        // Asynchronously load the result of the query.
        trackedOrders.LoadAsync(query);

        // Disable the button until the loading is complete.
        getCustomerOrders.IsEnabled = false;
    }


    Daoping Liu - MSFT
    2011年5月16日 3:02
    版主
  • 谢谢。楼主知道用Domain Service,WCF RIA, ADO.NET Entity怎么通过SL 端,传入一个连接字符串参数,动态改变ADO.NET EF实体的指向的数据库吗?我问了好多人,都没有满意的答案。

    2011年5月16日 13:38
  • 你好,

    请问我之前的回复有没有解决你原贴的问题呢?如果解决,请标记为答复。谢谢。

     

    关于你第二个问题,我想是和下面的帖子(你开的帖子)问的是同一个问题:

    http://social.microsoft.com/Forums/zh-CN/silverlightzhchs/thread/330e6cac-3f46-4610-80d1-59d6d2499721

    为了论坛的管理,我们是希望用户对一个问题开一个帖子,而不是在同一个帖子里发问多个问题。这样,用户本身就可以更容易得到来自其它用户的帮助(通过标题看到你的问题,从而有针对问题的用户进行回答)。

    谢谢合作。

    对于你的第二个问题,我会在上面链接的帖子里进行回复。


    Daoping Liu - MSFT
    2011年5月17日 2:12
    版主