2017-04-25 1 views
1

J'ai un modèleAvoir un problème lors de la liaison de données à GRIDVIEW

public class ItemHistory 
{ 
    public int TotalItems; 
    public int ScannedItems; 
    public int PendingItems; 
} 

sur le bouton événement click je veux charger une grille en fonction de ce que les valeurs. Le code pour Button_Click

int TotalItems = Convert.ToInt32(lblItemsScanned.Text); 
int ScannedItems = Convert.ToInt32(lblItemsScanned.Text); 

int PendingItems = TotalItems - ScannedItems; 
List<ItemHistory> ih = new List<ItemHistory>(); 
ih.Add(new ItemHistory 
{TotalItems, ScannedItems, PendingItems}); 
gvrecap.DataSource = ih; 
gvrecap.DataBind(); 

Mais, il me donne une erreur du ci-dessous:

Impossible d'initialiser le type « ConsignmentCreation.ItemHistory » avec un initialiseur de collection, car il ne met pas en œuvre « System.Collections.IEnumerable '

Impossible de le comprendre. S'il vous plaît aider ... Merci à l'avance

Merci pour la solution, mais je maintenant je suis face à un nouveau type de problème dans Databind();

Un champ ou une propriété avec le nom « TotalItems » n'a pas été trouvé sur le sélectionné la source de données.

Ce qui suit est l'arrangement Gridview:

            <asp:GridView ID="gvrecap" runat="server" 
          AutoGenerateColumns="false" PagerSettings-Mode="NumericFirstLast" PageSize="25" Width="741px"> 
          <Columns> 
           <asp:BoundField DataField="TotalItems" HeaderText="TotalItems" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="50" /> 
           <asp:BoundField DataField="ScannedItems" HeaderText="ScannedItems" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="50" /> 
           <asp:BoundField DataField="PendingItems" HeaderText="PendingItems" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="50" /> 
          </Columns> 
         </asp:GridView> 
+0

Vous ne pouvez pas lier l'aide d'une liste, comme qui implémente IEnumerable, alors que ItemHistory ne le fait pas. Jetez un coup d'oeil [ici] (https://social.msdn.microsoft.com/Forums/vstudio/en-US/4de439ac-80f8-4037-a37a-ba7ec29a024d/bind-list-in-gridview?forum=csharpgeneral) – Jaxi

+0

Modifier vos colonnes, sélectionnez la colonne TotalItems et assurez-vous que dans la section "Design" que le (nom) est orthographié correctement. Faites la même chose pour la section "Data" et assurez-vous que "DataPropertyName" est également correct. – Wheels73

Répondre

2

Votre syntaxe pour initialiser votre liste avec un nouvel objet ItemHistory n'est pas tout à fait raison. Vous devez spécifier le nom et la valeur du champ.

  int pendingItems = 10; 
      int scannedItems = 5; 
      int totalItems = 15; 

      List<ItemHistory> ih = new List<ItemHistory>(); 

      ih.Add(new ItemHistory 
      { 
       PendingItems = pendingItems, 
       ScannedItems = scannedItems, 
       TotalItems = totalItems 
      }); 

Les travaux ci-dessus. J'espère que cela pourra aider.

1

Vous n'avez pas utilisé l'initialiseur d'objet correctement. Essayez ceci (non testé):

int totalItems = Convert.ToInt32(lblItemsScanned.Text); 
int scannedItems = Convert.ToInt32(lblItemsScanned.Text); 

int pendingItems = totalItems - scannedItems; 
List<ItemHistory> ih = new List<ItemHistory>(); 
ih.Add(new ItemHistory 
{TotalItems = totalItems, ScannedItems = scannedItems , PendingItems = pendingItems }); 
gvrecap.DataSource = ih; 
gvrecap.DataBind(); 

Je recommande l'utilisation des propriétés dans votre modèle au lieu de variables à cet effet comme ceci:

public class ItemHistory 
{ 
    public int TotalItems {get;set;} 
    public int ScannedItems {get;set;} 
    public int PendingItems {get;set;} 
}