2012-06-19 1 views
0

Je développe une application Silverlight où vous pouvez définir des objectifs de vente pour un type de produit spécifique. J'ai une liste déroulante qui contient des types de produits comme Rice, Tea etc. Une fois que vous sélectionnez un type, tous les produits de ce type sont chargés dans une grille de données avec les informations suivantes: Nom du produit, Session (c'est le moment de la cible va être activée, sélectionnée à l'aide d'une datepicker avant, et ajoutée à datagrid sous forme de chaîne), Target Amount. j'ai défini la grille de données comme ci-dessous:Silverlight: l'application SIlverlight se bloque lorsque je configure une source d'articles pour la grille de données

<sdk:DataGrid x:Name="productListGrid" Margin="8,117,8,8" ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}" CellStyle="{StaticResource DataGridCellStyle}" RowHeight="50" AutoGenerateColumns="False"> 
      <sdk:DataGrid.Columns> 
       <sdk:DataGridTextColumn Binding="{Binding ProductName}" CanUserSort="True" CanUserReorder="True" CellStyle="{x:Null}" CanUserResize="True" ClipboardContentBinding="{x:Null}" DisplayIndex="-1" DragIndicatorStyle="{x:Null}" EditingElementStyle="{x:Null}" ElementStyle="{x:Null}" Foreground="{x:Null}" FontWeight="Normal" FontStyle="Normal" FontSize="NaN" HeaderStyle="{x:Null}" Header="Name" IsReadOnly="False" MaxWidth="Infinity" MinWidth="0" SortMemberPath="{x:Null}" Visibility="Visible" Width="Auto"/> 
       <sdk:DataGridTextColumn Binding="{Binding Session}" CanUserSort="True" CanUserReorder="True" CellStyle="{x:Null}" CanUserResize="True" ClipboardContentBinding="{x:Null}" DisplayIndex="-1" DragIndicatorStyle="{x:Null}" EditingElementStyle="{x:Null}" ElementStyle="{x:Null}" Foreground="{x:Null}" FontWeight="Normal" FontStyle="Normal" FontSize="NaN" HeaderStyle="{x:Null}" Header="Session" IsReadOnly="False" MaxWidth="Infinity" MinWidth="0" SortMemberPath="{x:Null}" Visibility="Visible" Width="Auto"/> 
       <sdk:DataGridTextColumn Binding="{Binding TargetQuantity, Mode=TwoWay}" CanUserSort="True" CanUserReorder="True" CellStyle="{x:Null}" CanUserResize="True" ClipboardContentBinding="{x:Null}" DisplayIndex="-1" DragIndicatorStyle="{x:Null}" EditingElementStyle="{x:Null}" ElementStyle="{x:Null}" Foreground="{x:Null}" FontWeight="Normal" FontStyle="Normal" FontSize="NaN" HeaderStyle="{x:Null}" Header="Target Quantity" IsReadOnly="False" MaxWidth="Infinity" MinWidth="0" SortMemberPath="{x:Null}" Visibility="Visible" Width="Auto"/> 
      </sdk:DataGrid.Columns> 
     </sdk:DataGrid> 

j'ai une classe qui représente chaque rangée:

public class DataGridRow 
     { 
      public string ProductName{get;set;} 
      public string Session { get; set; } 
      public string TargetQuantity { get; set; } 

     } 

, puis en utilisant la méthode suivante I ItemsSource ensemble de la grille de données:

private void initDataGrid(string product_type) 
     { 
      List<DataGridRow> rows = new List<DataGridRow>(); 
      if (start.Equals(NullDate) || end .Equals(NullDate)) 
      { 
       MessageBox.Show("Please select start and end date first!"); 
      } 
      else 
      { 
       var products_list = _context.Products.Where(entity => entity.ProductType.Equals(product_type)); 

       var product_name_list = from product in products_list select product.ProductName; 

       foreach (string name in product_name_list) 
       { 
        rows.Add(new DataGridRow() 
        { 
         ProductName = name, 
         Session = this.Months[start.Month-1] + "," + start.Year + "->" + this.Months[end.Month-1] + "," + end.Year, 
         TargetQuantity = "0.0" 
        }); 
       } 
       try 
       { 
        this.productListGrid.ItemsSource = rows; 
       } 
       catch(Exception ex) 
       { 
        MessageBox.Show(ex.Message); 
       } 
      } 
     } 

J'ai vérifié la liste rows par une boucle for si elle était correctement remplie, et j'ai vu que c'était le cas.

Cette méthode est appelée une fois que je sélectionne un type de produit de zone de liste déroulante:

private void productCombo_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) 
     { 
      string product_type=(string)e.AddedItems[0]; 
      this.initDataGrid(product_type); 
     } 

Mais une fois que je lance l'application et sélectionnez quelque chose dans la boîte à l'écran entier devient blank.Then je commentais la ligne this.productListGrid.ItemsSource = rows; à partir de initDataGrid méthode et puis je pourrais sélectionner des éléments de combo à l'exception de la grille de données laissée vide cette fois (d'habitude, l'itemsource n'est pas définie) Donc, il semble que lorsque je définis l'ItemsSource pour DataGrid mon application silverlight se bloque. J'ai lutté avec lui pendant quelques heures, cherché Google & StackOF tant de fois, mais pas moyen ... donc j'ai besoin d'aide mal.

Si n'importe quel corps peut résoudre le problème s'il vous plaît donnez un peu d'explication aussi car je suis nouveau à Silverlight et je ne veux pas faire l'erreur à nouveau par manque de connaissances.

Merci d'avance.

+0

Quelle exception faut-il donner quand il tombe en panne? Sans cela, il n'y a pas vraiment grand chose à faire. – McAden

Répondre

1

Puisque vous ne donnez pas d'exception, nous n'avons pas grand chose à faire. Je suppose que depuis que vous l'avez posté ici qu'il n'y a pas de ligne spécifique sur laquelle il se brise, c'est probablement un problème de Xaml. Pour commencer, essayez de simplifier les colonnes de votre DataGrid. Vous définissez un tas de propriétés dont vous n'avez aucun paramètre métier. Je remarque également que vous définissez DisplayIndex sur -1 sur chacun d'entre eux, ce qui est probablement le problème.

Essayez ceci:

<sdk:DataGrid x:Name="productListGrid" Margin="8,117,8,8" ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}" CellStyle="{StaticResource DataGridCellStyle}" RowHeight="50" AutoGenerateColumns="False"> 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTextColumn Binding="{Binding ProductName}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Header="Name" IsReadOnly="False" Width="Auto"/> 
     <sdk:DataGridTextColumn Binding="{Binding Session}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Header="Session" IsReadOnly="False" Width="Auto"/> 
     <sdk:DataGridTextColumn Binding="{Binding TargetQuantity, Mode=TwoWay}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Header="Target Quantity" IsReadOnly="False" Width="Auto"/> 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid> 
+0

Hé, j'ai ajouté un try try, même si je n'ai pas eu d'exception dans VS! Assez surprenant, n'est-ce pas? Et merci @Aden je vais essayer le vôtre un peu de temps. –

+0

Man! tu es le sauveur! Ça a marché comme sur des roulettes! Merci beaucoup! Désolé de vous revenir tard .... –

Questions connexes