Stocker des valeurs de TextBox dans GridView à DataBase?

J'ai un GridView dans lequel j'ai placé la textbox dans le model d'article de chaque colonne. Je veux stocker les valeurs que je vais entrer dans les zones de text à la database sur le button clic.

 protected void Button1_Click(object sender, EventArgs e) { GridView1.Visible = true; DataTable dt = new DataTable(); DataRow row = dt.NewRow(); for (int i = 0; i < GridView1.Rows.Count; i++) { ssortingng UserID = GridView1.Rows[i].Cells[1].Text; ssortingng q="insert into details (name) values('"+UserID+"')"; SqlCommand cmd = new SqlCommand(q, con); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(dt); } } 

le problème est que les zones de text ne sont même pas visibles lorsque je cours la page.

Vous ne pouvez pas get directement la reference de la textbox à partir de la grid. Donc, vous devez d'abord find la textbox de chaque ligne de la grid. Le code devrait être comme ça ..

 protected void Button1_Click(object sender, EventArgs e) { GridView1.Visible = true; DataTable dt = new DataTable(); DataRow row = dt.NewRow(); for (int i = 0; i < GridView1.Rows.Count; i++) { ## add below code ## TextBox txtUsrId=(TextBox)GridView1.Rows[i].FindControl("Your textbox id"); ssortingng UserID = txtUsrId.Text; ssortingng q="insert into details (name) values('"+UserID+"')"; SqlCommand cmd = new SqlCommand(q, con); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(dt); } 

}

faites le moi savoir..

Cette déclaration est fausse …

  ssortingng UserID = GridView1.Rows[i].Cells[1].Text; 

Vous ne pouvez pas accéder directement à la valeur d'un sous-contrôle. Fais-le comme ça-

 TextBox tt = (TextBox)GridView1.Rows[i].FindControl("your text box"); ssortingng UserId= tt.Text; 

Et à venir à votre problème, vous devriez montrer votre source Gridview pour get de l'aide.

Ça devrait être quelque chose comme ça.

 protected void Button1_Click(object sender, EventArgs e) { Int32 TotalRecords = 0; SqlConnection con = new SqlConnection("data source=.\; Integrated Security=SSPI; initial catalog=Testdb;User ID=sa;password=abc123;"); foreach (GridViewRow gvRow in GridView1.Rows) { TextBox textBox1 = (TextBox)gvRow.FindControl("textBox1"); Ssortingng q = "INSERT INTO details ([name]) VALUES('" + textBox1.Text.Trim() + "')"; SqlCommand cmd = new SqlCommand(q, con); con.Open(); TotalRecords += cmd.ExecuteNonQuery(); con.Close(); } lblMessage.Text = "Total " + TotalRecords + " inserted successfully."; } 

À propos des zones de text n'étant pas affichées sur la page, vérifiez si la propriété Visible de GridView, TemplateField ou TextBox n'est pas définie sur false . (Lorsque vous rendez la grid visible dans l'événement de clic sur le button.)

Aussi, je ne reorderais pas d'insert des loggings de cette façon. Je préfèrerais plutôt créer une procédure strored et passer des parameters à la place, pour éviter l' INJECTION SQL .