Obtenir les Valeurs dans GridView zone de texte TemplateField
J'ai un asp.net la page par Défaut.aspx, et c'est la page principale du Site.maître. Dans le Défaut.aspx, j'ai ajouté un gridview avec 3 lié aux données des champs et 1 Templatefield, et puis, traîné une zone de texte à l'intérieur de ce templatefield.
Je vais essayer d'obtenir la zone de texte les valeurs pour chaque ligne dans ce gridview, à l'aide de la méthode FindControl, mais elle retourne Rien.
Voici le code que j'utilise pour récupérer ces valeurs:
For Each gvr As GridViewRow In GridView1.Rows
Dim tb As TextBox = DirectCast(gvr.FindControl("TextBox1"), TextBox)
Dim txt As String = tb.Text
MsgBox(txt)
Next
Note: je suis en utilisant masterPages, et je pense que c'est à l'origine du problème.
[modifier]
Dans l'événement Page_load, lié à la gridview, je suis en utilisant le code:
GridView1.DataSource = f.xDa
GridView1.DataBind()
Dans le Bouton1, j'ai ajouté le code:
For Each gvr As GridViewRow In GridView1.Rows
Dim tb As TextBox = DirectCast(gvr.FindControl("TextBox1"), TextBox)
Dim txt As String = tb.Text
MsgBox(txt)
Next
Mais je suis Toujours une zone de texte vide.
Merci tout le monde!
- Où êtes-vous appeler ce code? Si le contrôle GridView n'est pas lié aux données pourtant, il ne sera probablement pas quelque chose à montrer. En outre, le fait que le code de jeter une erreur, ou avez-vous simplement obtenir une chaîne vide dans le MsgBox?
- Oui, le contrôle Gridview fonctionne très bien, avec le code: GridView1.DataSource = f.xDa GridView1.DataBind() Mais, quand je tape l'intérieur de zones de texte, je ne peux pas obtenir les valeurs à l'intérieur d'eux.... Dans ce cas, je reçois une chaîne vide dans la boîte de messages.
- À l'intérieur de ce que l'événement est le code dans votre question exécuté?
- Dans le Page_Load: GridView1.DataSource = f.xDa GridView1.DataBind() Dans un Bouton Button1 j'ai mis le code: <code> Pour Chaque gvr Comme GridViewRow Dans GridView1.Les lignes Dim tuberculose en tant Que zone de texte = DirectCast(gvr.FindControl("TextBox1"), une zone de texte) Dim txt as String = tb.Texte MsgBox(txt) Suivant <code>
- Veuillez utiliser le bouton "éditer" pour mettre à jour votre question avec le code pertinent. C'est trop dur à comprendre dans les commentaires ici =)
- Fait! Merci!
Vous devez vous connecter pour publier un commentaire.
Vous devez mettre à jour votre
Page_Load
code à ceci:Par le temps que votre code est à la
Button_Click
de l'événement, il a déjà rempli le contrôle GridView avec les données de votre base de données (en écrasant ce que votre utilisateur a tapé dans la zone de texte).Le code que j'ai ajouté ci-dessus les causes de données à charger seulement la première fois de - puis l'ASP.NET viewstate poignées de s'assurer l'état de la GridView est maintenu à jour.
J'ai eu un problème similaire, mais mon gridview n'était pas rendu à Page_Load donc je ne pouvais pas ajouter le "if not IsPostBack" liaisons à la Page_Load que le SQL dataset que j'utilisais n'était pas encore déclarée.
Au lieu de la FindControl et en appelant votre zone de texte par nom, essayer quelque chose comme ça pourrait fonctionner si vous ne pouvez pas utiliser le Page_Load gridview de liaison de données:
L' (0) dans les Cellules(0) est le numéro de la colonne dans votre gridview que vous tentez d'accéder. Ainsi par exemple, Si "TextBox1" est la 1ère colonne d'utilisation des Cellules(0), si c'est la 2ème colonne d'utiliser des Cellules(1) et ainsi de suite. Cela permet le texte dans la zone de texte pour être récupéré sans avoir à ajouter une section supplémentaire dans le Page_Load