Gridview [Résolu]

Signaler
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010
-
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010
-
    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 ?

29 réponses

Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

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é ..
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Split() est un membre de la Class String.





voila ce qu'il te faut : string




[] T = e.CommandArgument.ToString().Split(
";"
.ToCharArray());
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Ajoute un EditTemplate, dans lequel tu definira les control qu'il te faut pour pouvoir faire une modification dans ton Grid.
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

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
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

Merci c'est un peu clair, mais c'est quoi le nom du champ de la base ici ?
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Le champ que je recupère de ma base est "bAssocier".
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

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
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

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  ...
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

C'est mon datasource qui l'exécute, PK ?
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

Et si je veux passer deux arguments ?
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

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"



/>
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

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
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

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
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

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
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

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....
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

Ou je trouve la fonction Split() ?
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

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();

}

 
Messages postés
345
Date d'inscription
jeudi 15 février 2007
Statut
Membre
Dernière intervention
24 avril 2010

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
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Essaye de changer le nom de ton CommandName, met un autre truc comme CommandName="
MiseAjour" par exemple.
Messages postés
148
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2009

Fait la même chose pour ton CommandName="delete" ....