.NET2 GRIDVIEW COMPLET

teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005 - 26 avril 2005 à 18:09
ced038 Messages postés 10 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 11 juin 2007 - 19 juin 2007 à 17:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/30971-net2-gridview-complet

ced038 Messages postés 10 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 11 juin 2007
19 juin 2007 à 17:57
Je ne comprend pas un truc dans cet exemple, il ya des paramètres dans la requete update, mais je ne comprends pas comment passer les paramètres à la requete??

UpdateCommand="Update [currency] set [name]=@name where [id]=@id"

D'ailleurs, il ne devrait pas y avoir des comme pour l'insert?





J'arrive bien a faire marcher un select avec des paramètres, mais pour l'update, y'a qq chose qui m'echappe,

Merci de votre aide
ucef84 Messages postés 3 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 4 juin 2007
4 juin 2007 à 22:42
bsr je veux inserer des hyperliens dans on Datagrid . la 1er colonne contient le nom , donc je veux cliquer sur le nom a fin d'avoir une autre page qui va afficher d'autres informations sur le nom que jai choisi et merci d'avance
yoyo041080 Messages postés 18 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 10 septembre 2007
22 mars 2007 à 15:59
Petit précision sur comment récupèrer les infos de clé pour affichage de données ou suppression :

1) Il faut tout d'abord spécifier les DataKeyNames du GridView (ce sont la ou les clé qui identifie la ligne de manière unique)

2) Choper l'événement RowDeleting
Protected Sub GvDonnees_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gvDonnees.RowDeleting
Dim idSelected As Nullable(Of Integer)
' on lit la clé
idSelected = CType(gvDonnees.DataKeys(e.RowIndex).Value, Nullable(Of Integer))
' on essaie de supprimer
EffaceMesure(idSelected)
End Sub

3)Il faut utiliser la propriété DataKeys(index).Value pour obtenir la clé de la ligne ou
Il faut utiliser la propriété DataKeys(index).Values pour obtenir les clés de la ligne

j'espère que ça aidera ;)

++
cs_cbu Messages postés 394 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 novembre 2009 1
24 oct. 2006 à 19:40
Voila :
SqlDtsCustomerID.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure

Ca marche mieux ^^
cs_cbu Messages postés 394 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 novembre 2009 1
24 oct. 2006 à 19:25
Bon j'ai choppé le SQLProfiler et voila ce que j'obtiens :
exec sp_executesql N'1',N'@CustomerID int',@CustomerID=2

Ok pour le N..
Mais d'ou sort ce '1' ???
cs_cbu Messages postés 394 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 novembre 2009 1
24 oct. 2006 à 18:55
Bon alors .. Je suis passé sur la commande Delete car l'Update commencait a me monter la pression :

J'ai la meme erreur à savoir :
System.Data.SqlClient.SqlException: Incorrect syntax near '1'.

alors
Voila je déclare mon DeleteCommand :
SqlDtsCustomerID.DeleteCommand = "sp_deleteCustomer"
SqlDtsCustomerID.DeleteCommand = SqlDataSourceCommandType.StoredProcedure

Voila ma procStock :
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_deleteCustomer]
-- Add the parameters for the stored procedure here
(
@pi_CustomerID int
)

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
DELETE FROM dbo.mnBoCustomer WHERE CustomerID=@pi_CustomerID

END

... Humm Voilou et je ne sais pas ce quil se passe
cs_cbu Messages postés 394 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 novembre 2009 1
24 oct. 2006 à 17:06
Humm . j'ai SQLExpress.. donc je ne l'ai pas :/
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
24 oct. 2006 à 17:04
Essaie de lancer un sqlprofiler afin de voir la valeur des paramètres passés à ta procédure lors de ton update. Cela permettra de voir aussi s'il plante juste avant l'execution de ta prodédure ou pendant.
cs_cbu Messages postés 394 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 novembre 2009 1
24 oct. 2006 à 16:33
@pi_ID = 19776 {Integer}
@pi_FirstName = "ZZzzzzzz" {String}
Tous les autres paramètres sont Null
cs_cbu Messages postés 394 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 novembre 2009 1
24 oct. 2006 à 16:28
dans mes paramètres, je n'ai qu'une valeur ou il y a un '1' c'est mon @pi_ID qui vaut 19678
..
cs_cbu Messages postés 394 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 novembre 2009 1
24 oct. 2006 à 16:20
no problemo . :

SP :
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_updateCustomer]
-- Add the parameters for the stored procedure here
@pi_ID int,
@pi_OLDCustomerID int = null,
@pi_FirstName nvarchar(255) = null,
@pi_LastName nvarchar(255) = null,
@pi_Email nvarchar(255) = null,
@pi_CompanyName nvarchar(255) = null,
@pi_WhereDidYouHear nvarchar(255) = null

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
UPDATE dbo.mnBoCustomer

SET OLDCustomerID = @pi_OLDCustomerID,
FirstName = @pi_FirstName,
LastName = @pi_LastName,
Email = @pi_Email,
CompanyName = @pi_CompanyName,
WhereDidYouHear = @pi_WhereDidYouHear

WHERE CustomerID = @pi_ID
END

Ensuite les valeurs .. de mes parametres ..
sont typés correctement et en testant ma SP direct avec ses valeurs la Mise a jour se fait ..

..:/
Merci pour le temps passé à chercher :)
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
24 oct. 2006 à 16:11
Il faudrait que tu nous donnes le code de ta procédure et la valeur de tes paramètres lors de la levée de l'exception.
cs_cbu Messages postés 394 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 novembre 2009 1
24 oct. 2006 à 15:41
Salut,
bon moi j'ai un petit probleme ..:)

Je génère mes colonnes par code et les propriétés de mon SqlDataSource, GridView également..
Je n'arrive pas à faire d'update et de delete..
J'ai le message d'erreur suivant : Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near '1'.

Ma ProcStock fonctionne très bien.. Je construis tous mes paramètres, cela me parait correct.. Et lorsque je fais la MAJ, j'ai ce bug. Quelqu'un aurait une idée ?
Merci
cs_Amine Messages postés 36 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 24 octobre 2007
31 juil. 2006 à 13:00
Merci bcp ! ça marche très bien !

;-)
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
31 juil. 2006 à 11:56
IL faut passer par un template field de ce style la:
<Columns>
[lelien ]'/>



</Columns>
cs_Amine Messages postés 36 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 24 octobre 2007
31 juil. 2006 à 11:28
Salut
pouvez vous m'aider : j'ai un gridview dans une WebForm et je veux ajouter une colonne contenant des images comme lien hypertexte. Je sais pas comment le faire et est ce que c'est possible ou pas car ce que j'ai trouvé c'est une colonne de type hypertext mais on peut pas mettre dedans une image comme lien...

Merci d'avance pour votre aide

:-)
garnier54 Messages postés 158 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 9 décembre 2018
19 juil. 2006 à 17:06
j 'ai trouvé quand il creé l'evenement clik en vb il ajout deriere un handles (je sais pas trop a quoi cela sert), je l'ai enlevé et ca marche bien.

Merci
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
18 juil. 2006 à 09:29
Non désolé, je n'en ai pas la moindre idée. Solution bidouille si cela persiste: apres ou avant avoir rempli la gridview, verifier qu'il n'existe pas deux valeurs (new), si oui alors enlever une des deux lignes.
garnier54 Messages postés 158 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 9 décembre 2018
14 juil. 2006 à 20:47
bonjour,

je viens de tester votre code sur le gridview il est tres pratique felicitation
je voulais ajouter des enregistrements a mon grid. j'ai constater un petit probleme en ajout, le pg ajoute en fait deux lignes dans mon grid !!
j'ai repris le code je l'ai simplement mis en VB

avez vous une idee du probleme merci
xhordonneau Messages postés 8 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 21 avril 2006
21 avril 2006 à 09:16
Merci pour la précision de ta réponse GLDFDP.
Si j'avais lu ça plus tôt, je n'aurais pas perdu autant de temps!
Je vais donc tester la combinaison GridView/DetailView, comme préconisé par Microsoft "itself"!
Merci encore donc...je vous tiendrai au courant.
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
20 avril 2006 à 18:51
Non le InsertItemTemplate est juste la car c'est commun avec la detailview qui elle permet d'insérer un nouvel élément.

"The GridView control doesn't have automatic support for inserting data into a data source. The missing feature is entirely due to the GridView implementation and doesn't depend on the capabilities and characteristics of the underlying data source. The data source object, in fact, provides a CanInsert property and supports an InsertCommand property. Note that a combination of GridView and DetailsView controls enables you to achieve this functionality, as you'll see in a moment."

http://msdn.microsoft.com/msdnmag/issues/04/08/GridView/
xhordonneau Messages postés 8 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 21 avril 2006
20 avril 2006 à 16:51
Oui j'ai essayé de renseigner les valeurs qui manquaient, et ça marche bien!
Seulement mon problème est loin d'être résolu!
En effet, avec "insert", à chaque chargement de ma page, une ligne est insérée dans ma BDD, mais elle ne s'affiche pas dans le gridview, qui reste vide!
L'utilisateur ne fera pas forcément d'insertion à chaque visite, donc je me retrouve avec des lignes
"parasites dans ma BDD, et en production, avec une cinquantaine d'utilisateurs et un enregistrement à chaque chargement, elle aura vite fait d'exploser!
N'y a-t-il pas un moyen d'afficher une ligne vide dans ce satané de gridview sans toucher à la BDD?!
Les développeurs Microsoft ont bien dû penser à ca!
A quoi servent alors les InsertItem Templates? Comment s'en sert-on?
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
18 avril 2006 à 19:05
Pour Allen912, désolé mais je n'en n'ai pas la moindre idée.
POur Xhordonneau as tu essayé en insérant une valeur par défaut à ton jour genre 1 janvier 1900?
xhordonneau Messages postés 8 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 21 avril 2006
18 avril 2006 à 16:01
Très bonne idée que de lancer un sujet sur le DataGrid!
Peut-être sauras-tu m'aider?
J'ai un datagrid assez complexe, et je cherche à afficher le footer de ce dernier lorsque
le datasource qui l'alimente ne contient aucun résultat.
En effet, mon footer contient tous les champs nécessaires à l'ajout d'un enregistrement, ainsi qu'un bouton
d'insertion, mais quand il n'y a pas de lignes dans le datagrid, je ne peux rien ajouter, vu que le footer ne s'affiche pas.
A défaut de pouvoir l'afficher, y aurait-il une autre méthode pour ajouter des lignes simplement?

PS:j'ai essayé "sqlDataSource.Insert()", maisj'ai le message d'erreur suivant:
"Cannot insert the value NULL into column 'NuméroJour', table 'PtgDataSQLServer.dbo.Opérations'; column does not allow nulls. INSERT fails.". Je comprends bien l'erreur, mais je ne trouve pas de solution simple et performante.
Allen912 Messages postés 6 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 26 mars 2006
21 mars 2006 à 11:23
Comment peux t'on récupérer l'erreur générée par une tentative de suppression d'un élément protégé ? (Utlisé comme clé étrangère(?) dans une autre table en relation...)
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
3 févr. 2006 à 18:02
Dans ta connection tu rajoute ca:
<SelectParameters>

</SelectParameters>

Et dans ta requete select:
Select nomdetonchamp from tatable where id=@id
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
3 févr. 2006 à 17:52
En fait, en galérant pas mal, je viens de trouver mon erreur.
C'était juste une mauvaise manip au niveau du code.

Mais la, j'ai une question un peu plus pertinante
Peut on afficher que les valeurs de la table en fonction de la variable
de session en cours
Par exemple : je voudrais afficher que le nom dont la session est pour l'id 4
> Session("id") = 4
est il possible de passer en parametre la variable dans une clause WHERE
de ma requete SELECT
Si oui comment le faire au niveau du <SelectParameters>
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
3 févr. 2006 à 14:43
Alors je sais pas si j'ai bien compris ton probleme mais voila:
-->lordque tu clique sur add new currency, le systeme insere une nouvelle ligne dans la base. Ne fois que tu as mis cette nouvelle ligne, il ne faut pas recliquer sur add new currency mais sur update
-->Si lorsque tu as clique sur add new currency tu veux annuler l'insertion il te faut d'abord sortir du mode edition de la ligne qui s'est lance automatiquement puis faire delete, c'est concu comme ca.
Voila voila en esperant que ca ait pu t'aider.
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
3 févr. 2006 à 12:10
je comprends pas quand je clique sur "Add new currency ", il m'ajoute 2 lignes
1 deja insérer dans la base et l'autre en update c'est a dire que que la textbox
apparait et si je fais sur annuler. J'ai 2 lignes ajoutées alors que j'ai fais annuler
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
28 avril 2005 à 18:09
J'utilise les boutons delete pour ca et ca marche tres bien
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
28 avril 2005 à 14:31
ta technique marche quand tu fait une fonction qui enleve un enregistrement?
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
28 avril 2005 à 06:06
Bon comme demande j'ai fait un tutorial à l'adresse suivante:
http://larreurdefarcy.com/whidbey/Tutorial%20Gridview.html
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
28 avril 2005 à 03:12
Je pense que si ta gridview se met pas a jour c'est parceque tu effaces ton enregistrement avec une autre connexion. Et comme la datasource qui est en memoire elle, elle ne sait pas que ton enregistrement a ete efface, elle ne se met pas a jour. Essaie donc:
if(user.privilege<2)
{
SqlDataSource1.Delete();
}
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 17:28
oui aucun des deux marche... tu vois comment une autre solution que les gridviews?
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
27 avril 2005 à 16:41
tu as essayé Gridview1.DataBind() ou Page.Databind() ?
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 16:37
protected void GridView1_RowCommand(...)
{

if (e.CommandName == "Effacer")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[index];
string login =
Server.HtmlDecode(row.Cells[0].Text);
string pass =
Server.HtmlDecode(row.Cells[3].Text);
//fonction a moi
connexionODBC cnx = new connexionODBC();
//fonction a moi cnx.connect(ConfigurationSettings.AppSettings["Connectionstring"]);
//fonction a moi
requetesODBC r = new requetesODBC();
//fonction a moi
CUser user = r.VerifUser(login, pass, cnx);
if (user.privilege < 2)
{
//fonction a moi
r.EffacUser(user, "d:",cnx);
//et apres il me faudrait un update de la grid view car elle
ne voit pas que l enregistrement n existe plus!!
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
27 avril 2005 à 15:39
Il faudrait que tu m'envoies ton code.
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 14:16
J ai encore un probleme!!! j efface un utilisateur dans ma fonction et le probleme c est que la view grid ne se met pas a jour! rien a faire meme avec un reload de page ... je commence a en avoir marre de cette grille!
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
27 avril 2005 à 12:36
Je vais m'y pencher alors. J'incluerais aussi comment mettre une liste deroulante pour les cles etrangeres.
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 11:42
tu pourrais peut etre faire un tuto c est interressant comme probleme!
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
27 avril 2005 à 11:39
Merci parceque moi non plus je ne voyais pas comment faire.
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 11:00
ousp j ai tout fait buggé!!
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 10:59
Bon finalement j ai trouve, ca fait plaisir!!
il faut recuperer l index a l aide de l argument et alors on peut recuperer chaque colonne comme suit:

if (e.CommandName == "tacommande")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[index];
string colone1 = Server.HtmlDecode(row.Cells[0].Text);
Response.Write(colone);
}

J ai reussi a trouve ca dans le tuto bien caché a cette adresse http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemwebuiwebcontrolslinkbuttonclasscommandargumenttopic.asp
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 10:34
Aperement il faudrait utiliser CommandArgument mais ce truc n est pas defini pour les boutonsfield, les linkbuttons l ont mais ne sont pas definis pour les gridview :-(
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 10:04
J ai trouve ca dans la doc :
"Note The System.Web.UI.WebControls.GridViewCommandEventArgs class does not contain a property to indicate which row's button was clicked. If you need to know which row raised the event, pass the row's index to the event-handling method using the System.Web.UI.WebControls.CommandEventArgs.CommandArgument property."
seulement je ne vois pas comment rajouter un argument comme ils le disent...
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
27 avril 2005 à 09:31
MERCI!! ca marche enfin! il me manquait juste le bout de scipt! Mais j ai encore un autre probleme... Comment on recupere les infos qui correspondent a la ligne selectionnée? j ai cherche dans les attributs de "e" et de gridview mais je vois pas quoi faire....
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
27 avril 2005 à 03:41
Il suffit de rajouter une colonne de button field. Exemple:

Dans la balise de la gridview tu rajoutes:
OnRowCommand="GridView1_RowCommand"
Et dans le script:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "tacommande")
{
[Instructions]
}
}
teogal Messages postés 12 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 28 avril 2005
26 avril 2005 à 18:09
Ton code explique assez bien, mais il me reste un probleme, j essai de rajouter une colonne de boutons dans ma grille et de lui attribuer une fonction autre que delete update etc, je n arrive pas a trouver comment faire, j arrive bien a ajouter les boutons mais je n'arrive pas a leur coller une fonction quand on clique dessus... J ai galere toute une journee dessus j en peut plus