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 🙂

InformationsquelleAutor Lord Relix | 2013-05-16