2008-11-08 8 views
0

J'ai une liste d'éléments dans un ordre à afficher dans asp.net - chaque élément (ligne) aura 3 zones de texte afin que l'utilisateur peut à la fois voir et modifier cette donnée (coût d'expédition, coût de manutention, prix).Datagrid modifiable? Répétiteur?

Quelle serait une façon "recommandée" d'accomplir cela? Avec un répéteur, je suppose que je devrais alors faire défiler les valeurs du formulaire en postback, et avec un contrôle gridview je devrais remplacer onrowdatabound et Postback sur une autre méthode.

Je suis sûr que les deux fonctionneraient, mais que faites-vous en tant que développeur dans cette situation?

Répondre

1

Ce que je l'ai fait dans le passé est l'utilisation des données liée GridView TemplateColumns:

<asp:GridView runat="server" ID="grdRoster" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:TemplateField HeaderText="First Name"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="txtFirstName" Columns="10" Text='<%# Eval("RosterFirstName") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Middle Name"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="txtMiddleName" Columns="10" Text='<%# Eval("RosterMiddleName") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField>      
     <asp:TemplateField HeaderText="Last Name"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="txtLastName" Columns="10" Text='<%# Eval("RosterLastName") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Ensuite, lors de la publication (par exemple, un bouton « Enregistrer » clic), vous pouvez faire une boucle à travers les lignes de la GridView et extraire les valeurs hors des zones de texte:

foreach (GridViewRow row in grdRoster.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     string firstName = ((TextBox) row.FindControl("txtRosterFirstName")).Text; 
     string middleName = ((TextBox) row.FindControl("txtRosterMiddleName")).Text; 
     string lastName = ((TextBox) row.FindControl("txtRosterLastName")).Text; 
    } 
} 
+0

Merci - donc le GridView est ce que vous utilisez, évidemment. Je me demandais juste. J'ai utilisé les deux, mais je n'ai jamais été satisfait de l'une ou l'autre solution. –

+0

Je pense que j'aime bien la méthode gridview parce que vous obtenez alors des champs sains pour vos identifiants, pas un nom bizarre de chose "recid | field". Findcontrol élimine cela car vous êtes limité dans la portée de cette ligne particulière. Merci Matt. –