2009-08-12 2 views
3

J'ai utilisé la fonction d'agrégation dans la page Liste du site Web de données dynamiques. Quand il s'exécute, il me donne, DataBinding: 'DynamicClass1' ne contient pas une propriété avec le nom 'EmployeeID'.DataBinding: 'DynamicClass1' ne contient pas de propriété portant le nom 'EmployeeID'

<asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource" 
       AllowPaging="True" AllowSorting="True" CssClass="gridview"> 
       <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:HyperLink ID="EditHyperLink" runat="server" 
           NavigateUrl='<%# table.GetActionPath(PageAction.Edit, GetDataItem()) %>' 
          Text="Edit" />&nbsp;<asp:LinkButton ID="DeleteLinkButton" runat="server" CommandName="Delete" 
           CausesValidation="false" Text="Delete" 
           OnClientClick='return confirm("Are you sure you want to delete this item?");' 
          />&nbsp;<asp:HyperLink ID="DetailsHyperLink" runat="server" 
           NavigateUrl='<%# table.GetActionPath(PageAction.Details, GetDataItem()) %>' 
           Text="Details" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 

       <PagerStyle CssClass="footer"/>   
       <PagerTemplate> 
        <asp:GridViewPager runat="server" /> 
       </PagerTemplate> 
       <EmptyDataTemplate> 
        There are currently no items in this table. 
       </EmptyDataTemplate> 
      </asp:GridView> 

      <asp:LinqDataSource ID="GridDataSource" runat="server" 
      ContextTypeName="DataClassesDataContext" 
       TableName="Employees" 
       GroupBy="EmployeeNo" 
       Select="new(Key, 
       Max(Version) As VersionNo)" 
      EnableDelete="true"> 
       <WhereParameters> 
        <asp:DynamicControlParameter ControlID="FilterRepeater" /> 
       </WhereParameters> 
      </asp:LinqDataSource> 

Je n'ai pas changé tout le code par défaut, sauf que j'ai ajouté ContextTypeName, TableName, GroupBy et sélectionnez dans LINQ Source de données ... Tableau "Employés" a « EmployeeID, EmployeeNo, EmployeeName, Département, Adresse, Ville, État, Pays, Version "en tant que colonnes ..

Une idée pour résoudre ce problème?

Merci d'avance!

Cordialement, Bala

Répondre

2

Le problème est que vous groupant ne crée pas le type de données que la grille s'attend à recevoir. GetDataItem() attend un type particulier de données et ce n'est pas ce que vous avez configuré dans votre LinqDataSource.

Votre sélectionnez doit inclure tous les éléments qui a besoin GetDateItem(), en ce moment, il ne possède pas:

new(Key, Max(Version) As VersionNo) //EmployeeID needs to be included here 
+0

Merci pour la réponse Joseph. Je ne l'ai pas changé tout le code par défaut, sauf que j'ai ajouté ContextTypeName, TableName, GroupBy et sélectionnez dans LINQ Source de données ... –

+0

Tabel employés a « EmployeeID, EmployeeNo, EmployeeName, Département , Adresse, City, Etat, Pays, Version "en tant que colonnes .. –

+0

Ajout de Select =" new (Clé, Max (Version) en tant que VersionNo, EmployeeId) "donne une erreur " Aucune propriété ou champ 'EmployeeId' n'existe dans le type 'IGrouping'2' ". J'ai essayé, GroupBy = "new (EmployeeNo, EmployeeId)" aussi. Ça donne la même erreur! –

1
new(Key, Max(Version) As VersionNo) is fine. 

Pour obtenir les employés ... Utilisation: Key.Employee

Le Key est une classe dynamique contenant toutes les propriétés spécifiées dans l'instruction group by. Tout autre élément (par exemple EmployeeNo, EmployeeName, Department, Address, Ville, State, Country, Version) aura besoin d'une instruction agrégée (Sum, Max, Min).