Comment faire pour récupérer zone de texte valeur dans gridview dans asp.net

Cela semble être une question commune mais de toute façon aucune des réponses que j'ai trouvé semble corriger mon cas - alors, vous demandez-vous ce que je pourrais être absent (je suis nouveau asp.net veuillez donc pardonner toutes les erreurs flagrantes).

J'ai un GridView qui est lié à un ObjectDataSource qui affiche papier de magazines et de leur prix de souscription. Si l'utilisateur souhaite s'abonner à un magazine, je voudrais ajouter une zone de texte et un bouton pour chaque ligne de la grille pour permettre à l'utilisateur d'entrer une date et cliquez sur le bouton pour vous abonner. Aucun champ existe dans GridView pour cette zone de texte.

Idéalement, je voudrais ajouter un paramètre à UpdateParameters pour envoyer la valeur dans la zone de texte à la méthode de mise à Jour. Mais j'ai échoué à le faire.

Quelques suggestions que j'ai trouvé sur l'aide de FindControl ne fonctionne pas non plus. (Je vois l'aide d'Inspecter l'Élément dans Firefox, l'ID de contrôle généré a un Ctrl0, Ctrl1, Ctrl2 préfixes.

Ci-joint l'exemple de page ASPX et le code-behind. Profondément reconnaissants de toutes les suggestions sur ce que je suis absent ici.

Merci beaucoup à l'avance.

Voici le fichier ASPX et le code-behind:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestGridView.aspx.cs" Inherits="WebApplication1.TestGridView" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server" DatasourceID="ObjectDataSource2" DataKeyNames ="MagazineID" OnRowUpdating="GridView1_RowUpdating">
<Columns>
<asp:BoundField DataField="MagazineID" HeaderText ="Magazine ID" ReadOnly="true" SortExpression="PricingID">
<ControlStyle Width="100%" />
</asp:BoundField>
<asp:BoundField DataField="MagazineName" HeaderText ="Magazine Name" ReadOnly="true" />
<asp:BoundField DataField="MagazinePrice" HeaderText ="Magazine price" ReadOnly="true" />
<asp:TemplateField HeaderText ="SubscriptionStartDate">
<ItemTemplate>
<asp:TextBox ID ="txtSubscriptionStartDateStr" runat="server" Width ="100px"/>
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField ButtonType="Button" CommandName="Update" Text="Subscribe" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server" UpdateMethod ="AddNewSubscription" SelectMethod="GetAllMagazines" TypeName="WebApplication1.TestGridView">
<UpdateParameters>
<asp:ControlParameter ControlID="txtSubscriptionStartDateStr" DefaultValue="" Name="userName" PropertyName="Text" Type="string" />
</UpdateParameters>
</asp:ObjectDataSource>
</div>
</form>
</body>
</html>

Code-Behind:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class TestGridView : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public DataTable GetAllMagazines()
{
DataTable dt = new DataTable();
object[] parms1 = new object[] {11, "Magazine1", 5.99};
object[] parms2 = new object[] {12, "Magazine2", 3.99 };
dt.Columns.Add("MagazineID");
dt.Columns.Add("MagazineName");
dt.Columns.Add("MagazinePrice");
dt.Rows.Add(parms1);
dt.Rows.Add(parms2);
return dt;
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridView gv = (GridView)sender;
GridViewRow gvRow = gv.Rows[e.RowIndex];
TextBox tb = (TextBox) gv.FindControl("txtSubscriptionStartDateStr");
if (tb == null)
throw new ApplicationException("Could not find TextBox");
string subscriptionStartDateStr = tb.Text;
//more code to parse and use the subscription date
}
public void AddNewSubscription(int magazineID, string subscriptionStartDateStr)
{
//insert database row here.
}
}
}
InformationsquelleAutor user1809292 | 2012-11-08