La lecture de chaque ligne dans GridView sur un Bouton de la Presse
J'ai un DataGrid qui est créé de façon dynamique à chaque fois que l'utilisateur sélectionne et élément dans une grille de données. Il me manque une dernière étape qui m'a donné un 8 heures de maux de tête. J'ai besoin de lire chaque ligne quand un Bouton est pressé. Fondamentalement, l'Utilisateur appuyez sur le BOUTON et le programme doit lire une valeur de chaque ligne (productID ou Nom[unique dans ce cas]), d'attribuer une valeur "1" pour cela, insérez dans la base de données de l'information, et répétez le processus avec chaque ligne. J'ai eu jusqu'ici:
Protected Sub btnProcess_Click(sender As Object, e As EventArgs) Handles btnProcesss.Click
For Each GridViewRow In GridView2.Rows
'EmptySpace
Next
End Sub
Et c'est tout. Je sais que j'ai la boucle correctement (à droite?) mais je ne sais pas quoi ajouter puisque je ne peux pas utiliser ce code par exemple:
Dim findrow = e.Row.Cell(cellIndex).FindControl("ControlID")
Car il me feriez une erreur dans l'e.Ligne. Toute aide sur la façon de procéder serait apprécié :).
EDIT: Code pour générer les colonnes sous SelectedIndexChanged...
If GridView2.Rows.Count = 0 Then
' dt = New DataTable()
dt.Columns.Add(New DataColumn("Name", GetType(System.String)))
dt.Columns.Add(New DataColumn("Price", GetType(System.String)))
Else
dt = DirectCast(Session("DataTable"), DataTable)
End If
Ajouté le code entier...
Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GridView1.SelectedIndexChanged
.
Dim row = GridView1.SelectedRow
If Not row Is Nothing AndAlso IsNumeric(row.Cells(3).Text) Then
Dim Price As Double = CDbl(row.Cells(3).Text)
Dim Name As String = CStr(row.Cells(2).Text)
If GridView2.Rows.Count = 0 Then
' dt = New DataTable()
dt.Columns.Add(New DataColumn("Name", GetType(System.String)))
dt.Columns.Add(New DataColumn("Price", GetType(System.String)))
Else
dt = DirectCast(Session("DataTable"), DataTable)
End If
Session("DataTable") = dt
Dim dr1 As DataRow = dt.NewRow()
dr1(0) = Name.ToString
dr1(1) = CDbl(Price.ToString)
dt.Rows.Add(dr1)
GridView2.DataSource = dt
GridView2.DataBind()
End If
End Sub
Mis À Jour Gestionnaire De Bouton
Protected Sub btnProcess_Click(sender As Object, e As EventArgs) Handles btnProcess.Click
For Each row As GridViewRow In GridView2.Rows
Dim str As String = TryCast(row.FindControl("Name"), Label).Text
'For testing purposes a MsgBox
MsgBox(str)
Next
- J'ai l'habitude de définir manuellement mes colonnes dans le <asp:GridView> tag au lieu de autogeneratecolumns="True". Lorsque je fais cela, et d'utiliser le <asp:TemplateField>, je peux définir mes propres contrôles. De cette façon, je sais qui contrôle à demander mon ID dans le code-behind. Je vois que vous êtes de définir les colonnes de votre Table de données par programmation, mais ces colonnes restent les mêmes? Si oui, pouvez-vous définir manuellement votre colonnes de la marque et de l'utilisation de la <asp:TemplateField> donc, vous savez ce qui commandes à saisir dans le code-behind?
- J'ai trouvé un post où quelqu'un a été à l'aide de code similaire à ce que vous avait à l'origine. Depuis qu'ils ne sont pas à trouver la commande par ID, ils sont juste à l'aide de la position de la cellule dans la table. Quelque chose comme... "e.Ligne.Les cellules(0).Texte". Qui aurait tendance à se rompre, si, lors de modifier les colonnes. Les données que vous prévoyez ne pas être dans les colonnes attendus, et vous pourriez même finir avec un contrôle qui n'ont pas une propriété de Texte.
- Hey Rick! Merci! J'ai essayé de remplir le GridView à l'avance avec les noms de colonnes mais je n'ai pas trouvé une façon qui ne souffle pas dans mon visage ou n'a pas travaillé pendant l'ajout constant de données. Je vais ajouter le code entier dans l'OP. Le problème avec les e.Ligne.Les cellules(0), c'est que le code est en cours d'exécution en vertu de la ButtonPress, que le code du travail en vertu de la SelectedIndexChanged, mais j'ai besoin des données attrapé après que le bouton est pressé. Je vais poster le code complet!
- Je vais essayer ce que le Roi Majid posté ci-dessous et voir si cela fonctionne. C'est similaire à ce que vous avez posté... zut, c'est la même chose dans le fond. J'ai eu une erreur précédente avec un e.de ligne... et il m'a causé une certaine douleur mentale :P!
- Aaand pas gooooo. Je suis certainement la pensée de prise de colonnes asp GridView comme vous le suggérez et de leur donner une valeur. Mais je ne pense pas que le code que j'ai fonctionnera aussi bien qu'il ne l'est actuellement; ou je ne sais pas comment le faire fonctionner. L'essentiel est que vous sélectionnez quelque chose de GridView1 de la GridView2. Le code que j'ai là-haut DataBinds la session afin de ne pas disparaître à chaque fois et aussi ajoute une ligne à chaque fois qu'une nouvelle donnée est ajoutée. Je ne sais pas comment je voudrais faire travailler honnêtement.
- Où est le code qui ne fonctionne pas? Plus tôt vous aviez un clic sur un bouton - est-ce encore que ne fonctionne pas? Vous pouvez poster votre version à jour de ce code?
- Oh oui, je voulais juste montrer le code qui donne de la valeur à la Gridview que j'ai besoin d'obtenir les valeurs off (qui est source de confusion). Je vais poster la mise à jour Cliquez sur le Bouton gestionnaire. En gros, c'est le Roi Majid est un, mais je vais l'ajouter, tout de même. Merci de prendre le temps de répondre!
- Le roi Majid la réponse de l'ai eu de travail. Merci beaucoup pour votre temps Rick 🙂
Vous devez vous connecter pour publier un commentaire.
le bon Bouton de la gestion des Événements est :
//Ajoutée pour la Deuxième partie de votre Question:
Pour obtenir la Valeur dans la Colonne Nom:
//il suffit de remplacer l'Étiquette de vote avec le type de Contrôle que vous désirez
//juste de compiler le code et il fonctionne très bien
ce qui concerne
dt.Columns.Add(New DataColumn("Name", GetType(System.String)))
) de sorte que le FindControl ne fonctionne pas comme il le devrait. C'est ce qui est arriver de me rayer de ma tête =/!Dim str2 As String = TryCast(row.Cells(0).FindControl("Name"), Label).Text
mais il me donne aussi un NullValue. Je crois que ses un problème similaire OU je suis certainement la saisie de quelque chose de mal.La place de l'e.Ligne dans votre exemple, a utilisé une variable Pour Chaque boucle de la place.
J'ai mis à jour votre code légèrement à utiliser "gvr" afin de ne pas confondre avec le Type.