2010-01-12 4 views
1

Je travaille actuellement sur un morceau de code qui utilise un ancien DataGrid de style pour permettre à l'utilisateur d'entrer des informations dans la table. Il a déjà un bouton ajouter et supprimer. Actuellement, l'utilisateur entre les informations dans 3 zones de texte qui sont dans le pied de page, et les autres lignes utilisent des étiquettes pour afficher les informations. Essentiellement, ce que je veux faire est de prendre la ligne sur laquelle l'utilisateur a cliqué sur le bouton d'édition, et déplacer le texte de là vers le pied de page (suppression de la ligne sur laquelle il était affiché) afin que l'utilisateur puisse faire modifications, puis cliquez à nouveau sur le bouton Ajouter. Pour l'instant, j'ai essayé d'utiliser FindControls pour trouver la zone de texte et régler le texte de cette façon, mais il n'aime pas ça. Des idées?Modification d'une ligne d'une grille de données dans ASP.Net VB.Net

Répondre

0

Quelques points doivent être clarifiés - faites-vous référence à l'ancien contrôle .NET "DataGrid" ou au contrôle "GridView" plus récent. Aussi, est-ce une application web ou winforms?

Mes suggestions -

Avez-vous essayé d'ajouter et de programmation définir les contrôles TextBox en manipulant l'événement GridView1_RowEditing?

Pour supprimer la ligne qui a été modifiée, supprimez-la de la source de données et relancez la grille.

list.Remove(itemToRemove); 
GridView1.DataSource = list; 
GridView1.DataBind(); 

Ensuite, prenez les données de itemToRemove et l'utiliser pour créer et mettre en programmation dans le pied de page textboxes.

Si la troisième colonne de votre grille de données est appelée « Nom » et contient les données de nom, vous devez créer et mettre le pied de page de troisième colonne ligne de valeur TextBox comme celui-ci -

GridView1.FooterRow.Cells[2].Controls.Add(new TextBox { ID = "tbName", Text = item.Name }); 
0

Comment utilisez-vous FindControl? Il est toujours utile de publier votre code;)

Vous devriez être en mesure d'exécuter un FindControl() sur la ligne de pied de page et d'obtenir les zones de texte sans problème.

GridViewRow row = GridView1.FooterRow; 
TextBox txt1 = ((TextBox)row.FindControl,"TextBox1")); 
+0

Merci pour la réponse. Malheureusement je ne peux pas trouver un moyen d'accéder directement à la ligne de la grille de données (je ne peux pas créer un objet DataGridRow), mais j'ai trouvé une solution que je publierai ci-dessous. –

0

Essentiellement j'ai changé ce que j'avais initialement prévu. Au lieu de déplacer le texte de la ligne au pied de page textboxes et la suppression de la ligne, je place utilisé EditCommandColumn pour créer un bouton de lien comme si

<asp:EditCommandColumn ButtonType="LinkButton" ItemStyle-ForeColor="Blue" EditText='[edit]' UpdateText='[update]' CancelText='[cancel]'></asp:EditCommandColumn> 

Je devais aussi ajouter EditItemTemplate à chaque colonne, avec une zone de texte dans chaque , et liez les données aux zones de texte de la même manière qu'il était lié aux étiquettes dans ItemTemplates.

Ensuite, en utilisant le gestionnaire d'événements ItemCommand, j'ai ajouté du code pour définir EditItemIndex sur la ligne en cours de modification.

Private Sub GoodsList_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgdGoods.ItemCommand 

    Select Case e.CommandName 


     Case "Edit" 

      dgdGoods.EditItemIndex = e.Item.ItemIndex 

     Case "Cancel" 

      dgdGoods.EditItemIndex = -1 

     Case "Update" 

      dgdGoods.EditItemIndex = -1 
      'Update details here 

Ensuite, à la fin de cette reliure les données à la grille de données. Avec la commande EditCommandColumn, le bouton Modifier affichera automatiquement les boutons Mettre à jour et Annuler de la ligne en cours de modification.

Questions connexes