none
Ein vorheriger LoadAsync-Vorgang wurde noch nicht ... RRS feed

  • Frage

  • Hallo, habe mir das beispiel von der Microsoftseite "Wie kann ich WCF Dataservices in einer Silverlightanwendung benutzen" angesehen

    und ausprobiert.

    Das hat auch super funktioniert. Nun habe ich aber noch ein zweites Datengrid in die Seite eingefürt und will  die selben Daten nocheinmal

    anzeigen lassen. Nun bekomme ich die Fehlermeldung das der erste "products.LoadAsync(from..." noch nicht vertig ist.

    Hier die komplette Fehlermeldung.

    "Ein vorheriger LoadAsync-Vorgang wurde noch nicht abgeschlossen. Die LoadAsync-Methode für die DataServiceCollection kann erst wieder aufgerufen werden, wenn der vorherige Vorgang abgeschlossen wurde."

    Was kann ich machen?

     

            AdventureWorksLTEntities ctx = new AdventureWorksLTEntities(new Uri("/AdventureWorksService.svc", UriKind.Relative));
            AdventureWorksLTEntities ctx2 = new AdventureWorksLTEntities(new Uri("/AdventureWorksService.svc", UriKind.Relative));
            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                var products = new DataServiceCollection<Product>(ctx);
                var products2 = new DataServiceCollection<Product>(ctx2);
                products.LoadCompleted += ((o, args) => { grid.ItemsSource = products; });
               
               
               products.LoadAsync(from t in ctx.Product
                                    where t.ProductID > 994            select t);

                products.LoadCompleted += ((o, args) => { grid2.ItemsSource = products2; });
                products.LoadAsync(from t in ctx.Product
                                   where t.ProductID > 994
                                   select t);

    Benutze Visual Express Prof 2010

    Silverlight 4

    silberlicht

    Donnerstag, 26. August 2010 08:39

Antworten

  • Hallo,

    wenn Du zwei Datenquellen verwenden willst, so mußt auch derer zwei anlegen und verwenden.
    Oben erstellt Du zwar products2 arbeitest, dann aber nur mit products .

    Ein mögliche Aufbau (mit etwas deutlicher Benamsung), zunächst das XAML:

    <UserControl xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="Client.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d"
      d:DesignHeight="300" d:DesignWidth="400">
      <Grid>
        <Grid.RowDefinitions>
          <RowDefinition Height="*"/>
          <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <my:DataGrid x:Name="HighPriceGrid" Grid.Row="0"/>
        <my:DataGrid x:Name="LowPriceGrid" Grid.Row="1"/>
      </Grid>
    </UserControl>
    
    

    und der Code für MainPage_Loaded:

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          // Kontext instanziieren
          ctx = new AdventureWorksLT_DataEntities(new Uri("/AdventureWorksService.svc", UriKind.Relative));
    
          // Daten abrufen <= 1000
          var productsLowPrice = new DataServiceCollection<Product>(ctx);
          productsLowPrice.LoadCompleted += ((obj, args) => { this.LowPriceGrid.ItemsSource = productsLowPrice; });
          productsLowPrice.LoadAsync(from p in ctx.Product
                    where p.ListPrice <= 1000
                    orderby p.ProductID
                    select p);
    
          // Daten abrufen > 1000
          var productsHighPrice = new DataServiceCollection<Product>(ctx);
          productsHighPrice.LoadCompleted += ((obj, args) => { this.HighPriceGrid.ItemsSource = productsHighPrice; });
          productsHighPrice.LoadAsync(from p in ctx.Product
                    where p.ListPrice > 1000
                    orderby p.ListPrice descending
                    select p);
        }
    
    
    Gruß Elmar

     

    Donnerstag, 26. August 2010 10:17

Alle Antworten

  • Hallo,

    wenn Du zwei Datenquellen verwenden willst, so mußt auch derer zwei anlegen und verwenden.
    Oben erstellt Du zwar products2 arbeitest, dann aber nur mit products .

    Ein mögliche Aufbau (mit etwas deutlicher Benamsung), zunächst das XAML:

    <UserControl xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="Client.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d"
      d:DesignHeight="300" d:DesignWidth="400">
      <Grid>
        <Grid.RowDefinitions>
          <RowDefinition Height="*"/>
          <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <my:DataGrid x:Name="HighPriceGrid" Grid.Row="0"/>
        <my:DataGrid x:Name="LowPriceGrid" Grid.Row="1"/>
      </Grid>
    </UserControl>
    
    

    und der Code für MainPage_Loaded:

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          // Kontext instanziieren
          ctx = new AdventureWorksLT_DataEntities(new Uri("/AdventureWorksService.svc", UriKind.Relative));
    
          // Daten abrufen <= 1000
          var productsLowPrice = new DataServiceCollection<Product>(ctx);
          productsLowPrice.LoadCompleted += ((obj, args) => { this.LowPriceGrid.ItemsSource = productsLowPrice; });
          productsLowPrice.LoadAsync(from p in ctx.Product
                    where p.ListPrice <= 1000
                    orderby p.ProductID
                    select p);
    
          // Daten abrufen > 1000
          var productsHighPrice = new DataServiceCollection<Product>(ctx);
          productsHighPrice.LoadCompleted += ((obj, args) => { this.HighPriceGrid.ItemsSource = productsHighPrice; });
          productsHighPrice.LoadAsync(from p in ctx.Product
                    where p.ListPrice > 1000
                    orderby p.ListPrice descending
                    select p);
        }
    
    
    Gruß Elmar

     

    Donnerstag, 26. August 2010 10:17
  • Hllo Elmar,

     

    sehe es jetz auch. Wie ich an deinem code sehe brauche ich auch nur ein ctx und nicht zwei.

    Mein XAML sieht auch um einiges komplizierter aus als deiner.

    Vielen Dank für die Hilfe. Habe schon wieder was gelernt.

     

    silberlicht

     

    Donnerstag, 26. August 2010 11:16