Gridview [Résolu]

mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 21 févr. 2008 à 11:41 - Dernière réponse : mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention
- 6 mars 2008 à 15:35
    Bonjour, je débute avec gridview et j'ai rencontré quelques problèmes :
J'ai pu  afficher un gridview à partir d'une table puis j'ai ajouter les fields EDIT et DELETE et ca marche aussi.
Mais, le problème lors du la modification ("EDIT"), j'ai pas trouvé une solution pour afficher les contrôles de mon formulaire. Par défaut tous les champs sont des textbox or que mon formulaire contient des combox,....
Est ce qu'il ya un moyen de modifier les champs dans le gridview ?
Afficher la suite 

Votre réponse

29 réponses

lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 22 févr. 2008 à 14:55
+3
Utile
D'après ce que j'ai compris, tu souhaiterais recuperer la valeur d'un des champs de la Base directement dans les checkbox de ton Grid ... oui .. non ? Bon si c'est ça, essaye lorsque tu rempli ton Grid d'affecter une valeur booleen true (pour Y) et false (pour N) à la propriété Checked des Checkbox qui se trouve dans ton Grid....

Un truc de ce genre quoi :
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox
ID="CheckBox1" 

                            runat="server" 
                            
Checked
=
'<%# (DataBinder.Eval(Container, "DataItem.bAssocie").ToString() == "0")?false:true %>
'
/>
</ItemTemplate>
</asp:TemplateField>

Dans mon cas je teste si la valeur retourné lorsque je Bind mon Grid est 0 ou 1 et en fonction de cela je coche ou decoche le CB.

Je sais pas si ça repond à ton probleme ou du moins j'espere que ça t'as un peut aidé ..
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de lassaad83
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 25 févr. 2008 à 09:49
+3
Utile
Split() est un membre de la Class String.





voila ce qu'il te faut : string




[] T = e.CommandArgument.ToString().Split(
";"
.ToCharArray());
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de lassaad83
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 22 févr. 2008 à 12:46
0
Utile
Ajoute un EditTemplate, dans lequel tu definira les control qu'il te faut pour pouvoir faire une modification dans ton Grid.
Commenter la réponse de lassaad83
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 22 févr. 2008 à 13:09
0
Utile
Bonjour, j'ai déja fait un Edit template mais bon je veux me positionner sur des champs de ma base de données EX :

J'ai un champ dans ma base de données qui prend comme valeur 'Y' ou 'N'. Dans mon formulaire j'ai mis des checkbox et lors de l'insertion d'un nouvel enregistrement je convertie la valeur de checkbox selectionné en 'Y' ou 'N'.
Le problème, je souhaite savoir comment afficher dans le gridview les champs avec des checksbox remplie à partir d'un champ d'une base de données (mentionné ci dessus ) comme ci je fais l'inverse de l'insertion.
J'espère que vous m'aider.
Merci
Commenter la réponse de mimosa803
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 22 févr. 2008 à 15:04
0
Utile
Merci c'est un peu clair, mais c'est quoi le nom du champ de la base ici ?
Commenter la réponse de mimosa803
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 22 févr. 2008 à 15:27
0
Utile
Le champ que je recupère de ma base est "bAssocier".
Commenter la réponse de lassaad83
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 22 févr. 2008 à 16:50
0
Utile
Salut, bon j'ai essayé et tout va bien ... enfin !
Maintenant j'ai développé un  linkedbutton pour supprimer un Row voila le code (téléchargé d'Internet), que je n'ai pas compris, d'ailleur il marche mais je n'ai pas vu la requete. Mais j'ai réaliser  une requete de suppression lié à ma datasource :


<asp:TemplateField
HeaderText="Select1"
>








<
ItemTemplate
>






<
asp
:
LinkButton



ID
="LinkButton2"






CommandArgument
='
<%# Eval("profile_id") %>

'
  


CommandName
="Update"



runat
="server">







Delete</
asp
:
LinkButton
>






</
ItemTemplate
>






</
asp
:
TemplateField
>

protected
void Profile_GridView_RowDataBound(
object sender,
GridViewRowEventArgs e){

if (e.Row.RowType ==
DataControlRowType.DataRow){

LinkButton l = (
LinkButton)e.Row.FindControl(
"LinkButton1");l.Attributes.Add(

"onclick",
"javascript:return " +

"confirm('Are you sure you want to delete this record " +

DataBinder.Eval(e.Row.DataItem,
"profile_id") +
"')");}
}

Ici comment
Commenter la réponse de mimosa803
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 22 févr. 2008 à 17:43
0
Utile
Oui à chanque RowDataBound (construction d'une row) tu ajoute la prise en charge de l'evenement client onClick a tes LinkButton grâce au l.Attributes.Add(

Lorsque tu click sur ton boutton tu a une fenetre de confirmation, normalement elle te dit :
'Are you sure you want to delete this record + <l'Id du profile qui va être supprimer> l'id est est recuperé a partir la propriété CommandArgument=' <%# Eval("profile_id") %> '  du LinkButton.

Par contre est ce que tu à geré toute seule la suppréssion d'un Row ou bien c'est ton SqlDataSource qui le gère ? Parceque je vois pas trop comment tu as pu supprimer une Rows  ...
Commenter la réponse de lassaad83
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 22 févr. 2008 à 17:46
0
Utile
C'est mon datasource qui l'exécute, PK ?
Commenter la réponse de mimosa803
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 22 févr. 2008 à 17:47
0
Utile
Et si je veux passer deux arguments ?
Commenter la réponse de mimosa803
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 22 févr. 2008 à 18:10
0
Utile
Pour rajouté des argument dans ton SqlDataSOurce tu as des propritées qui se charge de le faire ( UpdateParameters,  InsertParameters ou bien SelectParameters)




voila un exmple :



<
asp
:
SqlDataSource
id
="SqlDataSource1"
runat
="server"
ConnectionString
="
<%$ ConnectionStrings:MyNorthwind%>

"

SelectCommand
="SELECT EmployeeID, LastName, Address FROM Employees"

UpdateCommand
"UPDATE Employees SET Address@Address WHERE EmployeeID=@EmployeeID">

<
UpdateParameters
>

<
asp
:
ControlParameter



Name
="Address"



ControlId
="TextBox1"



PropertyName
="Text"/>

<
asp
:
ControlParameter



Name
="EmployeeID"



ControlId
="DropDownList1"



PropertyName
="SelectedValue"/>

</
UpdateParameters
>

</
asp
:
SqlDataSource
>


<
asp
:
DropDownList
id
="DropDownList1"
runat
="server"
DataTextField
="LastName"
DataValueField
="EmployeeID"
DataSourceID
="SqlDataSource1">

</
asp
:
DropDownList
>









<
asp
:
Label



id
="Label1"



runat
="server"



Text
="Nouvelle Adresse : "
AssociatedControlID
="TextBox1"



/>

<
asp
:
TextBox



id
="TextBox1"



runat
="server"



/>
Commenter la réponse de lassaad83
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 22 févr. 2008 à 21:32
0
Utile
bonsoir, je parle des paramètres dans ce code :




asp
:
TemplateField
HeaderText
="Select1"
>









<
ItemTemplate
>









<
asp
:
LinkButton
ID
="LinkButton2"









CommandArgument
=' <%# Eval("profile_id") %> '    //1 er paramètre qui va éxécuter la commande delete








CommandName
="Update"
runat
="server">










Delete</



asp
:
LinkButton
>









</
ItemTemplate
>









</
asp
:
TemplateField


>




Comment je peux spécifier le code à exécuter dans ce Linkedbutton ?

Merci
Commenter la réponse de mimosa803
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 23 févr. 2008 à 11:14
0
Utile
Dans ton Grif tu as un membre



CommandName, ce membre c'est lui qui va se charger de gerer les traitement que tu voudras effectuer lors du click sur ton Link.


Si tu veux utiliser ce Link pour la suppression tu dois faire un truc de ce genre :


















<
ItemTemplate
>





<
asp
:
LinkButton
ID
="LinkButton2" 



CommandArgument
=' <%# Eval("profile_id") %> '    // c'est l'argument que tu va utiliser dans ton code C#



CommandName
="Suppression"
runat
="server">





Suppression</



asp
:
LinkButton
>





</
ItemTemplate
>





</
asp
:
TemplateField


>

Et au niveau du code du devra implémenté l'évenement RowCommand du Grid :
protected voidGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
  {
    if(e.CommandName=="Suppression")
    {
           intprofile_id= Convert.ToInt32(e.CommandArgument); // le profile_id de ta ligne selectionné.
           // tu éxécute ton traitement ici la suppréssion de la ligne
Commenter la réponse de lassaad83
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 25 févr. 2008 à 08:56
0
Utile
Bonjour, merci pour votre aide juste un petit détail concernant les arguments :

CommandArgument=' <%# Eval("profile_id") %> ' // si je veux passer plus qu'un argument dans Eval, comment je fais ?

Merci
Commenter la réponse de mimosa803
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 25 févr. 2008 à 09:28
0
Utile
En fait commandArgument fonctionne uniquement sur un String et pas un tableau de string ...
public function get CommandArgument() : String;
public function set CommandArgument(String);





Tu va devoir concatener tes arguments en t'aidant d'un séparateur comme le point virgule comme dans cette exemple:

         
            CommandArgument



='<%# Eval("profile_id")
+ ";" + Eval("ton_autre_propriété")
%>'

Après dans ton code tu n'aura qu'a utliser la fonction toute faite split() qui te permettra de récupérer un tableau de tes arguments....
Commenter la réponse de lassaad83
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 25 févr. 2008 à 09:31
0
Utile
Ou je trouve la fonction Split() ?
Commenter la réponse de mimosa803
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 25 févr. 2008 à 11:59
0
Utile
Salut, maintenant j'ai fais un bouton pour faire la modification d'un row mais lorsque je clique il me renvoie sur la commande update générée par le datasource de la gridview. Mais j'ai écrit le code comme dans le cas de delete :

if

(e.CommandName.Equals(
"Update")){

//bool var = Request.Form["TheVariable"];

//if (var)

//{

//string screen = Tstr[0].ToString();

Int64 profile_id =
Convert.ToInt64(Tstr[0]);

string profile_shortname =
Convert.ToString(Tstr[1]);

string profile_name =
Convert.ToString(Tstr[2]);Response.Write(profile_id);

strConnection = System.Configuration.

ConfigurationManager.ConnectionStrings[
"NSConnectionString"].ConnectionString;cn =

new
SqlConnection(strConnection);

try{

cn.Open();

 

string requete =
"Update PROFILE Set profile_shortname=@sh_name,Set profile_name=@name where profile_id=@profile_id";

SqlCommand cm =
new
SqlCommand(requete, cn);

SqlParameter parma1 = cm.Parameters.Add(
"@sh_name",
SqlDbType.VarChar, 50);

SqlParameter parma2 = cm.Parameters.Add(
"@name",
SqlDbType.VarChar, 100);

SqlParameter parma3 = cm.Parameters.Add(
"@profile_id",
SqlDbType.Int);

int index =
Convert.ToInt32(e.CommandArgument);

//string selectedProfile = Profile_GridView.DataKeys[index].Values[1].ToString();

//parma1 = profile_shortname;

//parma2 =profile_name;parma3.Value = profile_id;

cm.ExecuteNonQuery();

Profile_Label.Text =

"Success UPDATE";}

catch (
Exception E){

Profile_Label.Text = E.Message.ToString();

}

finally{

cn.Close();

cn.Dispose();

Profile_GridView.DataBind();

}

 
Commenter la réponse de mimosa803
mimosa803 346 Messages postés jeudi 15 février 2007Date d'inscription 24 avril 2010 Dernière intervention - 25 févr. 2008 à 12:18
0
Utile
Bonjour dsl pour le dérangement, mais j'ai un nouveau prob :  tout à l'heure j'ai bien exécuté le code delete, mnt j'ai supprimer le datasource du gridview mais j'ai mis une requete select dans le page_load(), c'est bon j'obtient l'affichage mais lorsque je clique sur delete une erreur se produit : The GridView 'Profile_GridView' fired event RowDeleting which wasn't handled
Commenter la réponse de mimosa803
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 25 févr. 2008 à 12:22
0
Utile
Essaye de changer le nom de ton CommandName, met un autre truc comme CommandName="
MiseAjour" par exemple.
Commenter la réponse de lassaad83
lassaad83 148 Messages postés vendredi 28 avril 2006Date d'inscription 1 décembre 2009 Dernière intervention - 25 févr. 2008 à 12:26
0
Utile
Fait la même chose pour ton CommandName="delete" ....
Commenter la réponse de lassaad83

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Gridview - page 2