Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Édition complexe sur une grille en C #

Une approche consiste à autoriser les mises à jour d'une manière plus Ajaxy, comme l'explique Aristos. Ceci est généralement considéré comme une approche plus conviviale et offrira certainement une expérience utilisateur plus agréable, mais nécessite une familiarité avec jQuery et JavaScript et les interactions entre le client et le serveur sont un peu plus complexes de votre point de vue.

Si vous souhaitez continuer à utiliser le paradigme de contrôle Web, pensez à faire des champs "Arrive à" et "Partir à" des TemplateFields. Dans le ItemTemplate, vous pouvez continuer à afficher le texte que vous concaténez dans la base de données, mais vous placeriez un GridView dans le EditItemTemplate. Ce GridView peut être lié à un contrôle de source de données (également dans EditItemTemplate) et configuré pour prendre en charge la modification. Si vous liez des données par programmation (c'est-à-dire que vous n'êtes pas à l'aide d'un contrôle de source de données), vous devrez alors lier les données à l'enfant GridView chaque fois que la ligne parent devient modifiable. Cela peut être fait de manière déclarative en utilisant un balisage comme ceci :

<asp:TemplateField ...>
    <EditItemTemplate>
        <asp:GridView runat="server" id="gvChild" DataSource='<%# SomeFunction() %>' ...>
           ...
        </asp:GridView>
    </EditItemTemplate>
</asp:TemplateField>

Ici, SomeFunction serait une fonction dans votre classe code-behind (généralement) qui renvoie les données à lier à la grille.

Alternativement, vous pouvez lier les données à l'enfant GridView par programme via le parent GridView RowDataBound gestionnaire d'événements. À savoir, vous vérifieriez si vous avez affaire à la ligne en cours de modification (c'est-à-dire si e.Row.RowIndex = ParentGridViewID.EditIndex ). Si tel est le cas, vous pouvez référencer par programme l'enfant GridView en utilisant e.Row.FindControl("ChildGridViewID") puis définissez son DataSource propriété et appelez son DataBind méthode.

Lorsqu'un utilisateur clique sur le bouton Modifier de la grille parent, les cellules "Arrivée à" et "Départ à" s'affichent sous la forme d'une grille avec leurs propres boutons Modifier pour modifier les heures individuelles. Vous pouvez également placer le GridView modifiable enfant dans l'ItemTemplate si vous souhaitez permettre aux utilisateurs de modifier les heures "Arriver à" et "Partir à" sans obliger l'utilisateur à choisir d'abord de modifier l'enregistrement parent.