2009-10-03 3 views
0

Ok, je vais essayer de donner une description très bried mais détaillée de ce que j'ai besoin d'accomplir.Source de données d'objet .NET, DetailsView et DropDownList

D'abord, j'ai un contexte de données LinqToSQL défini qui a un objet employé. J'ai ensuite créé un BLL (partiel de l'employé) qui gère mes validations, insertions, mises à jour, etc. Everthing est bon à ce stade. Ensuite, j'ai créé une vue détaillée avec une liaison de source de données d'objet à mes méthodes select/update/insert sur mon objet Employee. C'est bien aussi, les données tirent comme il se doit, les mises à jour, les insertions comme il se doit, sauf pour un problème. J'ai des problèmes avec la liste déroulante à l'intérieur de la vue des détails. Ce sont des champs obligatoires, ne peuvent pas être null. Lorsque cette contrainte est supprimée, le code fonctionne correctement.

Affichage d'extraits de code - champs abrégés pour afficher les informations pertinentes.

<asp:DetailsView ID="grd_empDetails" runat="server" DataSourceID="empDataSource" DataKeyNames="EmployeeID" DefaultMode="Insert" AutoGenerateRows="false"> 
      <Fields> 
       <asp:BoundField HeaderText="First Name" DataField="FirstName" /> 
       <asp:TemplateField HeaderText="Type of Employee"> 
        <ItemTemplate> 
         <asp:DropDownList ID="empType" runat="server" DataValueField="empType" AppendDataBoundItems="true"> 
          <asp:ListItem Text="Full Time" Value="1" /> 
          <asp:ListItem Text="Part Time" Value="2" /> 
          <asp:ListItem Text="Subcontractor or 1099" Value="3" /> 
          <asp:ListItem Text="Intern" Value="4" /> 
         </asp:DropDownList> 
        </ItemTemplate>     
       </asp:TemplateField> 
       <asp:CommandField ShowInsertButton="true" ShowCancelButton="true" />  
      </Fields> 
     </asp:DetailsView> 

Lorsque la méthode d'insertion est appelée, le empType est toujours retourné comme Nothing (empType est le champ de base de données).

Quelle est la bonne façon d'attacher la valeur de la liste déroulante à mon objet afin qu'il puisse être correctement créé dans la base de données? La plupart de mes recherches ne cessent de me dire comment lier une liste déroulante à une source de données d'objet, mais ce n'est pas ce que je dois faire. Ceci est une liste déroulante de base, 4 éléments qui ne changeront jamais. Serait-il sensé d'utiliser juste une balise de sélection HTML standard ici ou cela pourrait même aider.

Merci de regarder, laissez-moi savoir si vous avez besoin de plus d'informations.

Répondre

1

On dirait que c'était quelque chose de simple, mais l'EDI VS2008 ne me montrait pas que c'était une option. Afin de se lier à l'ObjectDataSource, vous devez faire quelque chose comme ceci:

<asp:TemplateField HeaderText="Type of Employee"> 
        <ItemTemplate> 
         <asp:DropDownList ID="empType" runat="server" DataValueField="empType" SelectedValue='<%#Bind("empType") %>'> 
          <asp:ListItem Text="Full Time" Value="1" /> 
          <asp:ListItem Text="Part Time" Value="2" /> 
          <asp:ListItem Text="Subcontractor or 1099" Value="3" /> 
          <asp:ListItem Text="Intern" Value="4" /> 
         </asp:DropDownList> 
        </ItemTemplate>     
       </asp:TemplateField> 

La partie SelectedValue de la liste déroulante ne montrait pas pour moi comme une étiquette valide pour la dropdownlist, mais VS ne pas étouffer sur elle à la compilation ou l'exécution et le plus important, cela fonctionne!

0

Tout va bien, mais lorsque vous le chargez, la liste déroulante est-elle initialement remplie? Si ce n'est pas le cas, essayez de définir l'un des éléments à sélectionner lors du chargement, sinon il risque de ne renvoyer aucune valeur si l'utilisateur n'en sélectionne pas.

+0

Ce qui me rendait fou! La liste s'est affichée correctement, mais n'a pas pu récupérer la valeur. Je l'ai compris après quelques recherches google astucieux - son posté ci-dessus. Merci d'avoir regardé! – Tommy

Questions connexes