La meilleure façon de modifier des enregistrements personnalisés dans ASP.NET ?

StackOverflow https://stackoverflow.com/questions/12706

  •  08-06-2019
  •  | 
  •  

Question

Je viens d'un milieu Rails et je travaille sur un projet ASP.NET (pas ASP MVC).Question de débutant :Quelle est la manière la plus simple de créer un éditeur personnalisé pour une table d'enregistrements ?

Par exemple:J'ai un tas de lignes de données et je souhaite modifier le champ "catégorie" sur chacune d'elles - peut-être une liste déroulante, peut-être un lien, peut-être que l'utilisateur le saisit.

Dans Rails, je parcourrais les lignes pour créer une table et j'aurais un formulaire pour chaque ligne.Le formulaire aurait une zone de saisie ou une liste déroulante et soumettrait les données à un contrôleur tel que "/item/edit/15?category=foo" où 15 était l'ID d'élément et la nouvelle catégorie était "foo".

Je suis nouveau dans le modèle ASP.NET et je ne suis pas sûr de la « bonne » façon de procéder : il s'agit simplement du moyen le plus simple de récupérer les nouvelles données et de les enregistrer.Est-ce que je créerais un contrôle personnalisé et l’ajouterais à chaque ligne ?Toute aide appréciée.

Était-ce utile?

La solution

Vous pouvez VRAIMENT tricher de nos jours et jeter un œil aux nouvelles données dynamiques fournies avec .NET 3.5 SP1.Scott Guthrie a un article de blog démontrant à quel point cela se déroulera rapidement et facilement pour vous ici :

http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx

Sans obtenir CETTE avancée, j'utiliserais le générateur XSD pour générer un DataSet fortement typé qui coïncide avec la table en question.Cela générera également le TableAdapter que vous pourrez utiliser pour effectuer toutes vos instructions CRUD.

À partir de là, liez-le à un DataGrid et exploitez tous les modèles/événements standard impliqués, tels que EditIndex, SelectedIndex, RowEditing, RowUpdated, etc.

Je fais cela depuis les débuts de la version 1.0 de .NET et ce type de fonctionnalité n'a fait que devenir de plus en plus rationalisé à chaque mise à jour du Framework.

MODIFIER:Je souhaite également faire un petit clin d'œil au blog de Matt Berseth.Je suis beaucoup de ses trucs depuis un moment maintenant et c'est génial !

Autres conseils

Il existe quelques contrôles qui le feront pour vous, avec différents niveaux de complexité en fonction de leur flexibilité relative.

La manière traditionnelle de procéder serait d’utiliser le contrôle DataGrid, qui vous donne une disposition de tableau.Si vous souhaitez quelque chose avec plus de flexibilité en apparence, les contrôles DataList et ListView disposent également d'une prise en charge intégrée pour la modification, l'insertion ou la suppression de champs.

Vérifier Le blog de Matt Berseth pour quelques excellents exemples de contrôles asp.net en action.

Merci pour les réponses les gars.Il semble que la personnalisation du DataGrid soit la voie à suivre.Pour tous les débutants ASP.NET, voici ce que je fais

<asp:DataGrid ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundColumn DataField="RuleID" Visible="False" HeaderText="RuleID"></asp:BoundColumn>
        <asp:TemplateColumn HeaderText="Category">
        <ItemTemplate>
            <!-- in case we want to display an image -->
            <asp:Literal ID="litImage" runat="server">
            </asp:Literal>
            <asp:DropDownList ID="categoryListDropdown" runat="server"></asp:DropDownList>
         </ItemTemplate>
        </asp:TemplateColumn>

    </Columns>
</asp:DataGrid>

Cela crée une grille de données.Nous pouvons ensuite le lier à une source de données (DataTable dans mon cas) et utiliser des éléments comme

foreach (DataGridItem item in this.GridView1.Items)
{
     DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown"));
     categoryListDropdown.Items.AddRange(listItems.ToArray());
}

pour remplir la liste déroulante initiale de la grille de données.Vous pouvez également accéder à item.Cells[0].text pour obtenir le RuleID dans ce cas.

Notes pour moi :Le modèle ASP.NET fait tout dans le fichier codebehind.À un niveau élevé, vous pouvez toujours parcourir GridView1.Items pour obtenir chaque ligne et item.findControl("ControlID") pour interroger la valeur stockée sur chaque élément, par exemple après avoir appuyé sur un bouton "Mettre à jour".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top