2011-05-16 4 views
0

J'ai un Gridview contenant 5 colonnes, dont les trois dernières colonnes a des zones de texte dans les modèles d'éléments. La première colonne se compose de nombres 1,2,3 ... etc, que je lie à partir d'une source de données. Lorsque je saisis du texte dans la dernière colonne de la zone de texte, pour une ligne particulière, j'ai besoin d'ajouter une nouvelle ligne au-dessous de cette ligne sur l'événement textchanged de cette zone de texte. La valeur de la première colonne de cette ligne doit également avoir une extension telle que 1A, 1B ... etc. Comme ça j'ai besoin que ce soit possible dans les autres rangs aussi ...... plz pourrait vraiment utiliser l'aide !!! Et aussi s'il vous plaît gardez la langue en C#.Gridview nouvelle ligne

La nouvelle partie rangée et les extensions sont le problème pour moi ..... le reste je peux faire !!!

Merci

+3

C'est génial, qu'est-ce que vous avez essayé jusqu'ici qui n'a pas fonctionné? – R0MANARMY

Répondre

1

Vous devez effectuer les opérations suivantes:

  1. Vous devez persister DataTable que vous liez à la Gridview entre postbacks. Je suggère de le stocker dans l'état de session.

    Session (PageID + "MainDT") = MyDataTable;

  2. Gérer l'événement changé de texte zone de texte

  3. Dans le gestionnaire d'événements, vous voulez charger le tableau de données hors session

    DataTable MainDT = Session (DataTable) (PageID + "MainDT") ;

  4. Ensuite, vous devez construire une nouvelle ligne de données. Mettez les valeurs que vous voulez dans votre nouvelle ligne dans ce DataRow. Comment créer un nouveau datarow avec un schéma correspondant à votre DataTable principal? Comme ceci:

    DataRow DR = DT.NewRow(); // copie le schéma de DataTable à la nouvelle ligne

  5. Ensuite, insérez la ligne dans la bonne position dans le tableau de données principal

Comment savez-vous quelle ligne pour insérer à? Il sera EditIndex + 1

DT.Rows.InsertAt(MyRow, RowToInsertAt); 

du gridview Enfin, vous devez lier de nouveau votre Gridview

MyGridView.DataSource = MyDataTable; 
MyGridView.DataBind() 

Remarque - La colonne où vous devez montrer 1A ou 1B qui est habituellement un nombre doit être basé sur un champ varchar/texte. Ainsi, vous voudrez peut-être que votre SQL qui alimente votre DataTable principal fasse un rapide Convert (varchar (55), MyNumber) en tant que MyNumber dans son Select Select. De cette façon, lorsque vous remplissez votre DataRow supplémentaire (voir ci-dessus), vous pouvez simplement insérer une chaîne dans la colonne associée à MyNumber.

Remarque2 - Habituellement dans ces situations, je vais ajouter une icône "+". Lorsqu'elle est pressée, une grille de vue imbriquée, un répéteur ou un datalist est utilisé à la place d'une ligne personnalisée. Je trouve que brouiller des lignes supplémentaires dans un Gridview de la manière ci-dessus est difficile à maintenir, alors que les gridviews imbriquées ou les datalists ne sont pas trop mauvais une fois que vous l'avez fait une fois. Désolé, si la syntaxe est un peu loufoque, je vis dans un monde VB.NET.