2010-04-08 4 views
1

Veuillez m'aider, j'ai ajouté le bouton de commande update/edit dans gridview afin de mettre à jour les données dans ma base de données SQL Server, mais je suis incapable de le faire. Les données ne sont pas mises à jour dans la base de données. Code pour onrowupdate =================== protected void gRowUpdate (expéditeur d'objet, GridViewUpdateEventArgs e) { Livres b = null; b = nouveaux livres(); DataTable dt = null; GridView g = (GridView) expéditeur; try {dt = new DataTable(); b = nouveaux livres(); b.author = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Auteur")); b.bookID = Convert.ToInt32 (g.Rows [e.RowIndex] .FindControl ("BookID")); b.title = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Titre")); b.price = Convert.ToDouble (g.Rows [e.RowIndex] .FindControl ("Prix")); // b.rec = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Date_of_reciept")); b.ed = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Edition")); b.bill = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Edition")); b.cre_by = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Edition")); b.src = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Edition")); b.pages = Convert.ToInt32 (g.Rows [e.RowIndex] .FindControl ("Edition")); b.pub = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Edition")); b.mod_by = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Edition")); b.remark = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Edition")); // b.year = Convert.ToString (g.Rows [e.RowIndex] .FindControl ("Edition")); b.updatebook (b); g.EditIndex = -1; dt = b.GetAllBooks(); g.DataSource = dt; g.DataBind(); Capture (Exception ex) { lancer (ex); } enfin { b = null; }impossible de mettre à jour gridview

} =================== Ma procédure stockée pour le livre de mise à jour capable de mettre à jour la base de données par le Comité exécutif dans SQLServer studio Mgmt ======= =================== ANSI_NULLS fixés sUR ensemble quoted_identifier vont

PROCÉDURE ALTER [dbo].[Usp_updatebook] @bookid bigint, @author varchar (50), @title varchar (50), @price bigint, @src_equisition varchar (50), @bill_no varchar (50), @publisher varchar (50), @pages bigint, @remark varchar (50), @edition varchar (50), @created_by varchar (50), @modified_by varchar (50) /datetime @date_of_reciept, datetime @year_of_publication/ AS déclare @modified_on datetime

set @ modified_on = getdate()

livres MISE À JOUR

SET

author = @ auteur, title = @ title, = prix de @,

src_equisition = @ src_equisition , bill_no = @ bill_no, éditeur = @ éditeur, /Date_de_reciept = @ date_de_reciept,/ pages = @ pages, remarque = @ remarque, edition = édition @, /Year_of_publication = @ year_of_publication,/

created_by = @ created_by, modified_on = @ modified_on, MODIFIED_BY = @ MODIFIED_BY

OÙ bookid = @ bookid ======================== fonction de bibliothèque de classe pour la mise à jour ============= =======

public void updatebook(Books b) 
    { 
     DataAccess dbAccess = null; 
     SqlCommand cmd = null; 
     try 
     { 
      dbAccess = new DataAccess(); 
      cmd = dbAccess.GetSQLCommand("usp_updatebook", CommandType.StoredProcedure); 
      cmd.Parameters.Add("@bookid", SqlDbType.VarChar, 50).Value = b.bookID; 
      cmd.Parameters.Add("@author", SqlDbType.VarChar, 50).Value = b.author; 
      cmd.Parameters.Add("@title", SqlDbType.VarChar, 50).Value = b.title; 
      cmd.Parameters.Add("@price", SqlDbType.Money).Value = b.price; 
      cmd.Parameters.Add("@publisher", SqlDbType.VarChar, 50).Value = b.pub; 
      // cmd.Parameters.Add("@year_of_publication", SqlDbType.DateTime).Value =Convert.ToDateTime(b.year); 
      cmd.Parameters.Add("@src_equisition", SqlDbType.VarChar, 50).Value = b.src; 
      cmd.Parameters.Add("@bill_no", SqlDbType.VarChar, 50).Value = b.bill; 
      cmd.Parameters.Add("@remark", SqlDbType.VarChar, 50).Value = b.remark; 
      cmd.Parameters.Add("@pages", SqlDbType.Int).Value = b.pages; 
      cmd.Parameters.Add("@edition", SqlDbType.VarChar, 50).Value = b.ed; 
      // cmd.Parameters.Add("@date_of_reciept", SqlDbType.DateTime).Value = Convert.ToDateTime(b.rec); 
      // cmd.Parameters.Add("@created_on", SqlDbType.DateTime).Value = Convert.ToDateTime(b.cre_on); 
      cmd.Parameters.Add("@created_by", SqlDbType.VarChar, 50).Value = b.cre_by; 
      //cmd.Parameters.Add("@modified_on", SqlDbType.DateTime).Value = Convert.ToDateTime(b.mod_on); 
      cmd.Parameters.Add("@modified_by", SqlDbType.VarChar, 50).Value = b.mod_by; 

      cmd.ExecuteNonQuery(); 

     } 
     catch (Exception ex) 
     { 
      throw (ex); 
     } 
     finally 
     { 
      if (cmd.Connection != null && cmd.Connection.State == ConnectionState.Open) 
       cmd.Connection.Close(); 
      dbAccess = null; 
      cmd = null; 
     } 

}

J'ai aussi essayé de faire la mise à jour en suivant façon gv1_updating protected void (object sender, GridViewUpdateEventArgs e) { GridView g = (GridView) expéditeur; abc a = new abc(); DataTable dt = new DataTable(); essayer {

  a.cd_Id = Convert.ToInt32(g.DataKeys[e.RowIndex].Values[0].ToString()); 
      //TextBox b = (TextBox)g.Rows[e.RowIndex].Cells[0].FindControl("cd_id"); 
      TextBox c = (TextBox)g.Rows[e.RowIndex].Cells[2].FindControl("cd_name"); 
      TextBox d = (TextBox)g.Rows[e.RowIndex].Cells[3].FindControl("version"); 
      TextBox f = (TextBox)g.Rows[e.RowIndex].Cells[4].FindControl("company"); 
      TextBox h = (TextBox)g.Rows[e.RowIndex].Cells[6].FindControl("created_by"); 
      TextBox i = (TextBox)g.Rows[e.RowIndex].Cells[8].FindControl("modified_by"); 

      //a.cd_Id = Convert.ToInt32(b.Text); 
      a.cd_name = c.Text; 
      a.ver = d.Text; 
      a.comp = f.Text; 
      a.cre_by = h.Text; 
      a.mod_by = i.Text; 
      a.updateDigi(a); 
      g.EditIndex = -1; 
      dt = a.GetAllDigi(); 
      g.DataSource = dt; 
      g.DataBind(); 

     } 
     catch(Exception ex) 
     { 
      throw (ex); 
     } 
     finally 
     { 
      dt = null; 
      a = null; 
      g = null; 
     } 



    } 

=================== mais ont erreur de Index hors exception gamme =========

s'il vous plaît faire réponse, thanxs à l'avance

Répondre

1

le IndexOutOfRangeException est probablement dû à ce code:

 a.cd_Id = Convert.ToInt32(g.DataKeys[e.RowIndex].Values[0].ToString()); 
     TextBox c = (TextBox)g.Rows[e.RowIndex].Cells[2].FindControl("cd_name"); 
     TextBox d = (TextBox)g.Rows[e.RowIndex].Cells[3].FindControl("version"); 
     TextBox f = (TextBox)g.Rows[e.RowIndex].Cells[4].FindControl("company"); 
     TextBox h = (TextBox)g.Rows[e.RowIndex].Cells[6].FindControl("created_by"); 
     TextBox i = (TextBox)g.Rows[e.RowIndex].Cells[8].FindControl("modified_by"); 

Plus précisément la partie où l'indexation se produit. Êtes-vous sûr d'avoir 9 cellules (index 0 à 8)?

+0

merci pour la réponse je l'ai essayé en changeant l'index, mais toujours la même error.Can Vous collez juste un petit code, par exemple pour gridview update.In la première méthode ci-dessus aucune erreur ne survient, mais la base de données est pas mis à jour. En fait, aucune valeur n'est lue dans les cellules gridview. Besoin d'urgence L'avoir dans le cadre du projet de dernière année.merci beaucoup d'avoir répondu – bhakti

Questions connexes