none
comment lier un detailsview à un gridview mais avec programmation.. RRS feed

  • Question

  •  

    Bonjour les amis,

     

    voilà je voudrai savoir comment peut-on lier un detailsview avec un Gridview mais sans utiliser un datasource.

     

    je m'explique:

     

    j'ai un Gridview que je viens de remplir par une recherche et ce en utilisant une requette SQL et biensûr un datareader (donc pas de Datasource utilisé).

     

    après j'ai rajouter une collone "Select" et là je voudrai faire afficher le détail de chaque ligne de mon Gridview sur un Detailsview qui lui aussi comporte une liste de boutons "Edit/Update/Cancel et Delete" pour faire les mises à jour sur ma table de BDD.

     

    champs de ma table TBLTEST

    ID: Int

    Nom: String

    Prenom: String

    Utilisateur: SessionWindows

     

    - Comment puis-je afficher avec programmation mon Detailsview en selectionnant une ligne de mon Gridview.?

    - Comment programmer les evennement "Edit", "Update", "Cancel" et "Delete" pour que je puisse interragir selon mon choix sur la mise à jour utilisant une requête SQL. (tout celà parceque je voudrai capter le nom de la session de l'utilisateur et l'enregistrer sur ma table SQL et ça je ne vois pas comment le faire en utilisant un Datasource).

     

    merci de m'aider là-dessus

    (un bout de code bien commenter ça serait super)

    jeudi 10 janvier 2008 09:00

Réponses

  • Bonjour,

    Voila déjà quelques éléments de recherche :

    • Pour gérer vous même la sélection dans le GridView vous pouvez utiliser les évènement SelectedIndexChanging (avant le code de sélection du GridView) ou SelectedIndexChanged (après le code de sélection du GridView). Vous pouvez par exemple sur l'évènement SelectedIndexChanged récupérer la ligne sélectionnée via la propriété SelectedRow, vous servir des données pour charger les données à afficher dans le DetailsView et enfin faire un DataBind de ces données.
    • Pour gérer vous même le DetailsView, vous avez les évènements ItemDeleting, ItemDeleted, ItemUpdating, ItemUpdated, ModeChanging et ModeChanged.

    La documentation de la msdn est assez bien faite sur ces évènements et possède aussi des exemples qui pourraient vous aider :

     

    http://msdn2.microsoft.com/fr-fr/library/system.web.ui.webcontrols.gridview_events(VS.85).aspx

    http://msdn2.microsoft.com/fr-fr/library/system.web.ui.webcontrols.detailsview_events(VS.85).aspx

     

    Guillaume

    jeudi 10 janvier 2008 09:34
  • Rebonjour,

    Effectivement le DetailsView sert à créer des relations Master/Detail. Il ne permet donc que d'afficher 1 élément et non une liste d'élément.

    Si vous voulez utiliser votre GridView comme un navigateur (dans votre exemple vous allez à la page spécifiée par la sélection, votre deuxième contrôle contient donc plusieurs lignes de données), il faudra dans ce cas, à mon avis, utiliser 2 GridView, le premier n'affichant qu'une partie des données pour permettre la navigation rapide dans le 2ème. Le deuxième lui contiendra l'ensemble des données avec un élément par page. Vous pouvez ensuite faire l'édition sur le 2eme GridView directement (évènement RowDeleting, RowEditing, RowUpdating, ...).

    Par ailleurs si vous ne voulez pas utiliser de DataSource car vous voulez insérer des données personnalisées en plus/à la place des données fournit par l'interface, vous pouvez en fait utiliser une DataSource et utiliser l'évènement RowUpdating pour mettre à jour vos données dans la DataSource avant que celle-ci ne soit mise à jour en base. En effet les évènements XXXing se produisent avant le code principal du GridView (mise à jour, suppression, ...), cela vous permet donc de modifier les données avant voir d'annuler tout simplement l'opération si vous considérer qu'elle n'a pas lieu d'être (suite à une vérifiaction programmatique par exemple).

     

    Guillaume

     

    jeudi 10 janvier 2008 11:17
  • Je ne connais pas de tutorial montrant ce genre d'utilisation. Si vous me donnez un peu plus d'infos je pourrais peut être vous faire un exemple de code. Il me faudrait les données de la table, la liste des champs dans le premier tableau et la liste des champs dans le 2eme avec au moins une modification specifique que vous voulez faire avant un update par exemple.

     

    Guillaume

    jeudi 10 janvier 2008 13:39
  • Bonjour,

    Voila un exemple qui marche, il faudra le mettre à jour pour utiliser une base :

     

    Code beside

     

    protected void Page_Load(object sender, EventArgs e)

    {

    // les handlers

    this.Gvtest.SelectedIndexChanged += new EventHandler(Gvtest_SelectedIndexChanged);

    this.BtnRecherche.Click += new EventHandler(BtnRecherche_Click);

    this.DetailsView1.ModeChanging += new DetailsViewModeEventHandler(DetailsView1_ModeChanging);

    this.DetailsView1.ItemUpdating += new DetailsViewUpdateEventHandler(DetailsView1_ItemUpdating);

    }

     

    void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)

    {

    // met à jour les données

    this.UpdateUser(

    (int)this.DetailsView1.DataKey.Value

    , ((TextBox)this.DetailsView1.Rows[1].Cells[1].Controls[0]).Text

    , ((TextBox)this.DetailsView1.Rows[2].Cells[1].Controls[0]).Text

    , "Utilisateur"

    );

     

    // repasse en mode lecture

    this.DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);

     

    // rebind avec les nouvelles données (ne marche pas dans l'exemple car les données ne sont pas vraiement mise à jour)

    this.BindDetail();

    }

     

    void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)

    {

    // change le mode pour passer en édition

    this.DetailsView1.ChangeMode(e.NewMode);

     

    // bind les données (pour rafraichir le control)

    this.BindDetail();

     

    this.lblEditResult.Text = null;

    }

     

    void Gvtest_SelectedIndexChanged(object sender, EventArgs e)

    {

    // bind les données en fonction de la ligne sélectionnée

    this.BindDetail();

    }

     

    void BtnRecherche_Click(object sender, EventArgs e)

    {

    // bind le resultat de la recherche

    this.BindResult();

    }

     

    void BindResult()

    {

    DataTable dt = new DataTable();

    dt.Columns.Add("ID", typeof(int));

    dt.Columns.Add("Nom", typeof(string));

    dt.Columns.Add("Prenom", typeof(string));

    dt.Columns.Add("Utilisateur", typeof(string));

    dt.Rows.Add(1, "A", "A", "");

    dt.Rows.Add(2, "B", "B", "");

    dt.Rows.Add(3, "C", "C", "");

     

    this.Gvtest.DataSource = dt;

    this.Gvtest.DataBind();

    }

     

    void BindDetail()

    {

    DataTable dt = new DataTable();

    dt.Columns.Add("ID", typeof(int));

    dt.Columns.Add("Nom", typeof(string));

    dt.Columns.Add("Prenom", typeof(string));

    dt.Columns.Add("Utilisateur", typeof(string));

     

    switch ((int)this.Gvtest.SelectedDataKey.Value)

    {

    case 1:

    dt.Rows.Add(1, "A", "A", "");

    break;

    case 2:

    dt.Rows.Add(2, "B", "B", "");

    break;

    case 3:

    dt.Rows.Add(3, "C", "C", "");

    break;

    }

     

    this.DetailsView1.DataSource = dt;

    this.DetailsView1.DataBind();

    }

     

    void UpdateUser(int id, string nom, string prenom, string utilisateur)

    {

    this.lblEditResult.Text = String.Format("ID: {0}, Nom: {1}, Prenom: {2}, Utilisateur: {3}", id, nom, prenom, utilisateur);

    }

     

     

    APSX

     

    <form id="form1" runat="server">

    <div>

    <asp:TextBox ID="TxtBoxRecherche1" runat="server" Width="195px"></asp:TextBox><br />

    <asp:TextBox ID="TxtBoxRecherche2" runat="server" Width="195px"></asp:TextBox><br />

    <asp:Button ID="BtnRecherche" runat="server" Text="Rechercher ..." /><br /><br />

    </div>

    <asp:GridView

    ID="Gvtest"

    runat="server"

    CellPadding="4"

    ForeColor="#333333"

    Width="576px"

    AutoGenerateColumns="False"

    Font-Bold="True"

    Font-Names="Arabic Transparent"

    HorizontalAlign="Left"

    DataKeyNames="ID"

    EmptyDataText = "Aucun résultat Trouvé">

    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />

    <RowStyle BackColor="#E3EAEB" BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" />

    <EditRowStyle BackColor="#7C6F57" />

    <SelectedRowStyle BackColor="Gold" Font-Bold="True" ForeColor="#333333" Font-Italic="False" Font-Underline="False" />

    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />

    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" Font-Size="16pt" />

    <AlternatingRowStyle BackColor="White" />

    <Columns>

    <asp:CommandField ShowSelectButton="True" />

    <asp:BoundField DataField="Nom" HeaderText="Nom" />

    <asp:BoundField DataField="Prenom" HeaderText="Prenom" />

    </Columns>

    </asp:GridView>

    <br />

    <aspBig SmileetailsView

    ID="DetailsView1"

    runat="server"

    AutoGenerateRows="False"

    CellPadding="4"

    ForeColor="#333333"

    GridLines="None"

    Height="50px"

    Width="296px" DataKeyNames="ID">

    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

    <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />

    <EditRowStyle BackColor="#2461BF" />

    <RowStyle BackColor="#EFF3FB" />

    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />

    <Fields>

    <asp:BoundField DataField="ID" HeaderText="le ID" ReadOnly="True" SortExpression="ID" />

    <asp:BoundField DataField="Nom" HeaderText="Le Nom" SortExpression="Nom" />

    <asp:BoundField DataField="Prenom" HeaderText="Le Prenom" SortExpression="Prenom" />

    <asp:CommandField ShowEditButton="True" />

    </Fields>

    <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />

    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

    <AlternatingRowStyle BackColor="White" />

    </aspBig SmileetailsView>

    <br />

    <asp:Label ID="lblEditResult" runat="server"></asp:Label>

    </form>

     


    J'espère que ça vous aidera

     

    Guillaume

     

    vendredi 11 janvier 2008 13:41
  • Bonjour,

    D'abord concernant l'utilisateur, vous pouvez effectivement récupérer son nom via la propriété sur l'objet Page "User.Identity.Name". Par contre si vous n'avez pas d'authentification sur votre site vous n'aurez qu'une chaine vide.

     

    Concernant maintenant les GridView et DetailsView, je comprend maintenant un peu mieux ce que vous vouliez. Si j'ai bien compris, lorsque l'on sélectionne une ligne dans le GridView, vous voulez reprendre les données du GridView pour les mettres dans votre DetailsView.

    En asp.net on ne fonctionne pas vraiment comme cela. D'abord concernant l'utilisation d'un couple GirdView/DetailsView, on l'utilise pour n'afficher dans le GridView qu'une partie des données et le DetailsView affiche l'ensemble des données de la ligne sélectionné. Dans ce cas on est bien obligé lors de la sélection d'une ligne du GridView à refaire une requête à la BDD pour avoir toutes les données nécessaire au DetailsView. D'autre par, même si vos données sont bien présente dans le GridView lors d'un postback (retour serveur) elle ne le sont plus sous la forme d'orginie (DataSet, DataTable, etc...) ce qui est assez embêtant pour les lires sachant qu'en plus vous n'aurez qu'une chaine. Voila par exemple comment récupérer le nom de la ligne sélectionnée :

     

    Extrait de code

    ((DataControlFieldCell)this.Gvtest.SelectedRow.Controls[1]).Text

     

     
    Dans l'exemple que je vous avais mis, j'utilisais le code "(int)this.Gvtest.SelectedDataKey.Value" pour récupérer l'id associé à la ligne et ensuite je simulais une requête "SELECT * FROM tbltest WHERE id = ..." pour affecter le résultat au DetailsView.
    Dans l'exemple que vous avez fournit, étant donnée que le DetailsView n'affiche pas de données en plus, il serait à mon avis plus simple d'autoriser l'édition directement sur le GridView. Voila l'exemple modifié :
     

    Extrait de code

    protected void Page_Load(object sender, EventArgs e)

    {

    // les handlers

    this.Gvtest.SelectedIndexChanged += new EventHandler(Gvtest_SelectedIndexChanged);

    this.Gvtest.RowEditing += new GridViewEditEventHandler(Gvtest_RowEditing);

    this.Gvtest.RowUpdating += new GridViewUpdateEventHandler(Gvtest_RowUpdating);

    this.Gvtest.RowCancelingEdit += new GridViewCancelEditEventHandler(Gvtest_RowCancelingEdit);

    this.BtnRecherche.Click += new EventHandler(BtnRecherche_Click);

    }

     

    void Gvtest_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

    {

    this.Gvtest.EditIndex = -1;

    this.BindResult();

    }

     

    void Gvtest_RowUpdating(object sender, GridViewUpdateEventArgs e)

    {

    this.UpdateUser(

    (int)this.Gvtest.DataKeys[e.RowIndex].Value

    , ((TextBox)this.Gvtest.Rows[e.RowIndex].Cells[1].Controls[0]).Text

    , ((TextBox)this.Gvtest.Rows[e.RowIndex].Cells[2].Controls[0]).Text

    , "Utilisateur"

    );

     

    this.Gvtest.EditIndex = -1;

    this.BindResult();

    }

     

    void Gvtest_RowEditing(object sender, GridViewEditEventArgs e)

    {

    this.Gvtest.EditIndex = e.NewEditIndex;

    this.BindResult();

    }

     

     

    Il faut aussi changer de la fichier aspx le colonne Select en Edit.

     

    J'espère que cela vous aidera,

    Guillaume

    mercredi 16 janvier 2008 13:27
  • Bonjour,

    Si vous avez effectivement plus de données à afficher il faut utiliser un DetailsView et donc mettre à jour le contenu de la méthode BindDetail() pour faire un select de toutes les données et faire un bind du résultat sur le DetailsView :

     

    Extrait de code

    void BindDetail()

    {

    using (SqlConnection connection = new SqlConnection("Data Source=server;Initial Catalog=TWEM;Persist Security Info=True;User ID=user;Password=passw"))

    {

    connection.Open();

    string sSql = "SELECT * From TBLTEST Where ID = " + this.Gvtest.SelectedDataKey.Value.ToString();

    SqlCommand cmd = new SqlCommand(sSql, connection);

     

    using (SqlDataReader dr = cmd.ExecuteReader())

    {

    this.DetailsView1.DataSource = dr;

    this.DetailsView1.DataBind();

    }

        }

    }

     

     

    Concernant le username, lorsque vous serez en authentification Forms il n'y aura pas de problème. Pour l'instant si vous êtes sous IIS, vous devez configurer votre site sous IIS pour utiliser l'authentification intégrée pour que votre username corresponde à l'utilisateur windows. Pour cela dans les propriétés du site, dans l'onglet Directory Security, cliquez sur le bouton Edit du premier carde. Dans la nouvelle fenetre, decochez l'acces anonyme et cochez l'authentification intégrée.

     

    Guillaume

    mercredi 16 janvier 2008 16:21
  • Bonjour,

    Non tu ne pourras pas utiliser les 2 à la fois (dans mon souvenir an tout cas  ). Lorsque tu auras mis en place l'authentification par formulaire, il faudra remettre l'authentification anonyme sous IIS.

    Vous trouverez a l'adresse suivante des explications sur les nouveaux controls en 2.0 pour l'authentification par formulaire :

     

    http://msdn2.microsoft.com/fr-fr/library/ms178329(en-us,VS.85).aspx

     

    Guillaume

    mercredi 16 janvier 2008 17:19
  • Bonjour,

    Desole pour la réponse tardive mais je suis un peu (voir beaucoup  ) débordé en ce moment.

    J'ai mis un String pour DataKey car je veux concatener la chaine representant la requete avec la valeur de DataKey, donc DataKey doit être sous forme de chaine aussi. (La méthode ToString sur un objet de type int renvoi une chaine contenant cette entier).

    Pour la méthode UpdateUser, il faudra effectivement faire une requete SQL UPDATE, voila un exemple :

     

    Extrait de code

    void UpdateUser(int id, string nom, string prenom, string utilisateur)

    {

    using (SqlConnection connection = new SqlConnection("Data Source=server;Initial Catalog=TWEM;Persist Security Info=True;User ID=user;Password=passw"))

    {

    connection.Open();

    string sSql = "UPDATE TBLTEST SET Nom = @Nom, Prenom = @Prenom, Utilisateur = @Utilisateur WHERE ID = @Id";

    SqlCommand cmd = new SqlCommand(sSql, connection);

    cmd.Parameters.Add("@Nom", SqlDbType.VarChar);

    cmd.Parameters["@Nom"] = nom;

    cmd.Parameters.Add("@Prenom", SqlDbType.VarChar);

    cmd.Parameters["@Prenom"] = prenom;

    cmd.Parameters.Add("@Utilisateur", SqlDbType.VarChar);

    cmd.Parameters["@Utilisateur"] = this.User.Identity.Name;

    cmd.Parameters.Add("@Id", SqlDbType.Int);

    cmd.Parameters["@Id"] = id;

     

    cmd.ExecuteNonQuery();

    }

    }

     

     

    J'ai utilisé une syntax avec des paramètres SQL car cela vous permet de ne pas vous embêter avec les doubles ' et la conversion de date en un format compris pas SQL Server par exemple.

     

    Guillaume

    dimanche 20 janvier 2008 20:27
  • Bonjour,

    Je pense qu'effectivement tes questions sur l'authentification seront mieux dans un autre post 

    Celui là est déjà pas mal long et un nouveau post te permettra de mettre un sujet plus adéquoite

     

    Guillaume

    mardi 22 janvier 2008 13:50

Toutes les réponses

  • Bonjour,

    Voila déjà quelques éléments de recherche :

    • Pour gérer vous même la sélection dans le GridView vous pouvez utiliser les évènement SelectedIndexChanging (avant le code de sélection du GridView) ou SelectedIndexChanged (après le code de sélection du GridView). Vous pouvez par exemple sur l'évènement SelectedIndexChanged récupérer la ligne sélectionnée via la propriété SelectedRow, vous servir des données pour charger les données à afficher dans le DetailsView et enfin faire un DataBind de ces données.
    • Pour gérer vous même le DetailsView, vous avez les évènements ItemDeleting, ItemDeleted, ItemUpdating, ItemUpdated, ModeChanging et ModeChanged.

    La documentation de la msdn est assez bien faite sur ces évènements et possède aussi des exemples qui pourraient vous aider :

     

    http://msdn2.microsoft.com/fr-fr/library/system.web.ui.webcontrols.gridview_events(VS.85).aspx

    http://msdn2.microsoft.com/fr-fr/library/system.web.ui.webcontrols.detailsview_events(VS.85).aspx

     

    Guillaume

    jeudi 10 janvier 2008 09:34
  •  

    Merci Guillaume,

     

    je vais jeter un oeil sur ces deux lien et essayer d'adapter ça par rapport à ma requêtte.

     

    je te reviendrai si je coince quelque part

     

    Alexy

    jeudi 10 janvier 2008 09:45
  •  

    Re salut Guillaume,

     

    je viens de vérifier, sur les deux lien il s'agit d'une relation Master/detail hors ce que je ne veux faire moi c'est de lier le Detailview avec mon gridview en utilisant par exemple :

     

    un evenement (GridView1_SelectedIndexChanged ):
    DetailsView1.PageIndex = GridView1.SelectedIndex

     

    et le reste suit concernant le codage des differents evennements (Edit/Update/Cancel/Delete) une chose que je ne veux pas que le Datasource prenne en charge (sans auto generation de ces commandes).

     

    y a t-il un tutorial dans ce sens bien détaillé ??

     

    merci à toi

    jeudi 10 janvier 2008 10:24
  • Rebonjour,

    Effectivement le DetailsView sert à créer des relations Master/Detail. Il ne permet donc que d'afficher 1 élément et non une liste d'élément.

    Si vous voulez utiliser votre GridView comme un navigateur (dans votre exemple vous allez à la page spécifiée par la sélection, votre deuxième contrôle contient donc plusieurs lignes de données), il faudra dans ce cas, à mon avis, utiliser 2 GridView, le premier n'affichant qu'une partie des données pour permettre la navigation rapide dans le 2ème. Le deuxième lui contiendra l'ensemble des données avec un élément par page. Vous pouvez ensuite faire l'édition sur le 2eme GridView directement (évènement RowDeleting, RowEditing, RowUpdating, ...).

    Par ailleurs si vous ne voulez pas utiliser de DataSource car vous voulez insérer des données personnalisées en plus/à la place des données fournit par l'interface, vous pouvez en fait utiliser une DataSource et utiliser l'évènement RowUpdating pour mettre à jour vos données dans la DataSource avant que celle-ci ne soit mise à jour en base. En effet les évènements XXXing se produisent avant le code principal du GridView (mise à jour, suppression, ...), cela vous permet donc de modifier les données avant voir d'annuler tout simplement l'opération si vous considérer qu'elle n'a pas lieu d'être (suite à une vérifiaction programmatique par exemple).

     

    Guillaume

     

    jeudi 10 janvier 2008 11:17
  •  

    Donc si je comprend bien , là il va faloir laisser de côté le detailsview et passer à un second Gridview.

     

    franchement j'ai pas bcp d'idées quant à l'utilisation de ce controle à deux fois en parallèle.

     

    est-ce que tu as des liens qui détaillent ces quelques manipulations (des tutorials).

     

    merci à toi

     

    Alexy  

    jeudi 10 janvier 2008 11:43
  • Je ne connais pas de tutorial montrant ce genre d'utilisation. Si vous me donnez un peu plus d'infos je pourrais peut être vous faire un exemple de code. Il me faudrait les données de la table, la liste des champs dans le premier tableau et la liste des champs dans le 2eme avec au moins une modification specifique que vous voulez faire avant un update par exemple.

     

    Guillaume

    jeudi 10 janvier 2008 13:39
  •  

    Salut Guillaume,

    super, je t'envoi les deux bouts de code que j'ai pu faire à savoir le peuplage de mon Gridview "Gvtest" sans utiliser de Datasource, ainsi que mon DetailsView "DetailsView1" qui lui attend toujours comment le lier par programmation pour faire par lasuite les mises à jour necessaires incluant la collonne "Utilisateur":

     

    la BDD : TWEM

    la Table: TBLTEST

    les champs:

    ID ---- Int

    Nom ---- String

    Prenom ---- string

    Utilisateur ---- String (session windows de chaque utilisateur).

     

    mon codes :

    ---------------

    C# 

    ---------------

    protected void BtnRecherche_Click(object sender, EventArgs e)
        {
            SqlConnection connection = new SqlConnection("Data Source=Server;Initial Catalog=TWEM;Persist Security Info=True;User ID=user;Password=passw");
            try
            {
                connection.Open();
            }
            catch (Exception ex)
            {
                resultatlbl.Text = ex.Message;
            }
            try
            {
                string sSql;
                sSql = "SELECT * From TBLTEST Where Nom Like '" + TxtBoxRecherche1.Text + "%' AND Prenom Like '" + TxtBoxRecherche2.Text + "%'";
     
                SqlCommand cmd = new SqlCommand(sSql, connection);
                SqlDataReader reader = cmd.ExecuteReader();
                Gvtest.DataSource = reader;
                Gvtest.DataBind();
                reader.Close();
     
            }
            catch (Exception ex)
            {
                resultatlbl.Text = ex.Message;
            }
            finally
            {
                connection.Close();
            }   
        }

    ----------------

    ASP.NET

    ----------------

    <body>
        <form id="form1" runat="server">
        <div>
            <table width="100%">
                <tr>
                    <td style="width: 221px; height: 33px">
                    </td>
                    <td style="text-align: left; height: 33px;" colspan="2">
                        <span style="font-size: 16pt">
                        Rechercher un Enregistrement ...</span></td>
                    <td style="width: 213px; height: 33px;">
                    </td>
                </tr>           
                <tr>
                    <td style="width: 221px">
                    </td>
                    <td style="width: 200px">
                        Par Raison Sociale :</td>
                    <td>
                        <asp:TextBox ID="TxtBoxRecherche1" runat="server" Width="195px"></asp:TextBox>
                        et /
                        ou</td>
                    <td style="width: 213px">
                    </td>
                </tr>
                <tr>
                    <td style="width: 221px">
                    </td>
                    <td style="width: 200px">
                        Par N° Client :</td>
                    <td>
                        <asp:TextBox ID="TxtBoxRecherche2" runat="server" Width="195px"></asp:TextBox></td>
                    <td style="width: 213px">
                    </td>
                </tr>
                <tr>
                    <td style="width: 221px">
                    </td>
                    <td align="right">
                        <asp:Button ID="BtnRecherche" runat="server" Text="Rechercher ..." OnClick="BtnRecherche_Click" /></td>
                    <td>
                        <asp:Button ID="BtnEffacer" runat="server" Text="Effacer" Width="105px" /></td>
                    <td style="width: 213px">
                    </td>
                </tr>
                <tr>
                    <td style="width: 221px; height: 21px">
                    </td>
                    <td style="width: 200px; height: 21px;">
                    </td>
                    <td style="width: 268px; height: 21px;">
                    </td>
                    <td style="width: 213px; height: 21px;">
                    </td>
                </tr>
                <tr>
                    <td style="width: 221px; height: 185px">
                    </td>
                    <td colspan="2" style="height: 185px">
                        <aspStick out tongueanel ID="Panel1" runat="server" Height="170px" ScrollBars="Auto" Width="470px">
                            <asp:GridView ID="Gvtest" runat="server" CellPadding="4" ForeColor="#333333"
                                Width="576px" AutoGenerateColumns="False" Font-Bold="True" Font-Names="Arabic Transparent" HorizontalAlign="Left" DataKeyNames="ID" EmptyDataText = "Aucun résultat Trouvé"  >
                                <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                                <RowStyle BackColor="#E3EAEB" BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" />
                                <EditRowStyle BackColor="#7C6F57" />
                                <SelectedRowStyle BackColor="Gold" Font-Bold="True" ForeColor="#333333" Font-Italic="False" Font-Underline="False" />
                                <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
                                <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" Font-Size="16pt" />
                                <AlternatingRowStyle BackColor="White" />
                                <Columns>
                                    <asp:CommandField ShowSelectButton="True" />
                                    <asp:BoundField DataField="ID" HeaderText="ID" Visible="False" />
                                    <asp:BoundField DataField="Nom" HeaderText="Le Nom" />
                                    <asp:BoundField DataField="Prenom" HeaderText="Le Prenom" />
                                </Columns>
                            </asp:GridView>
                        </aspStick out tongueanel>
                    </td>
                    <td style="width: 213px; height: 185px">
                    </td>
                </tr>
                <tr>
                    <td style="width: 221px; height: 31px">
                    </td>
                    <td style="height: 31px;" align="center" colspan="2">
                        <asp:Label ID="resultatlbl" runat="server" Font-Size="Larger" ForeColor="#C00000"></asp:Label></td>
                    <td style="width: 213px; height: 31px;">
                    </td>
                </tr>
            </table>
       
        </div>
            <br />
            <aspBig SmileetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
                CellPadding="4" ForeColor="#333333" GridLines="None" Height="50px" Width="296px"  >
                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />
                <EditRowStyle BackColor="#2461BF" />
                <RowStyle BackColor="#EFF3FB" />
                <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                <Fields>
                    <asp:BoundField DataField="ID" HeaderText="le ID" ReadOnly="True" SortExpression="ID" />
                    <asp:BoundField DataField="Nom" HeaderText="Le Nom" SortExpression="Nom" />
                    <asp:BoundField DataField="Prenom" HeaderText="Le Prenom" SortExpression="Prenom" />
                    <asp:CommandField ShowEditButton="True" />
                </Fields>
                <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />
                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="White" />
            </aspBig SmileetailsView>
            &nbsp;<br />
            <br />
            <br />
        </form>
    </body>

    --------------------------

     

    merci à toi Guillaume

    jeudi 10 janvier 2008 14:58
  • Bonjour,

    Voila un exemple qui marche, il faudra le mettre à jour pour utiliser une base :

     

    Code beside

     

    protected void Page_Load(object sender, EventArgs e)

    {

    // les handlers

    this.Gvtest.SelectedIndexChanged += new EventHandler(Gvtest_SelectedIndexChanged);

    this.BtnRecherche.Click += new EventHandler(BtnRecherche_Click);

    this.DetailsView1.ModeChanging += new DetailsViewModeEventHandler(DetailsView1_ModeChanging);

    this.DetailsView1.ItemUpdating += new DetailsViewUpdateEventHandler(DetailsView1_ItemUpdating);

    }

     

    void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)

    {

    // met à jour les données

    this.UpdateUser(

    (int)this.DetailsView1.DataKey.Value

    , ((TextBox)this.DetailsView1.Rows[1].Cells[1].Controls[0]).Text

    , ((TextBox)this.DetailsView1.Rows[2].Cells[1].Controls[0]).Text

    , "Utilisateur"

    );

     

    // repasse en mode lecture

    this.DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);

     

    // rebind avec les nouvelles données (ne marche pas dans l'exemple car les données ne sont pas vraiement mise à jour)

    this.BindDetail();

    }

     

    void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)

    {

    // change le mode pour passer en édition

    this.DetailsView1.ChangeMode(e.NewMode);

     

    // bind les données (pour rafraichir le control)

    this.BindDetail();

     

    this.lblEditResult.Text = null;

    }

     

    void Gvtest_SelectedIndexChanged(object sender, EventArgs e)

    {

    // bind les données en fonction de la ligne sélectionnée

    this.BindDetail();

    }

     

    void BtnRecherche_Click(object sender, EventArgs e)

    {

    // bind le resultat de la recherche

    this.BindResult();

    }

     

    void BindResult()

    {

    DataTable dt = new DataTable();

    dt.Columns.Add("ID", typeof(int));

    dt.Columns.Add("Nom", typeof(string));

    dt.Columns.Add("Prenom", typeof(string));

    dt.Columns.Add("Utilisateur", typeof(string));

    dt.Rows.Add(1, "A", "A", "");

    dt.Rows.Add(2, "B", "B", "");

    dt.Rows.Add(3, "C", "C", "");

     

    this.Gvtest.DataSource = dt;

    this.Gvtest.DataBind();

    }

     

    void BindDetail()

    {

    DataTable dt = new DataTable();

    dt.Columns.Add("ID", typeof(int));

    dt.Columns.Add("Nom", typeof(string));

    dt.Columns.Add("Prenom", typeof(string));

    dt.Columns.Add("Utilisateur", typeof(string));

     

    switch ((int)this.Gvtest.SelectedDataKey.Value)

    {

    case 1:

    dt.Rows.Add(1, "A", "A", "");

    break;

    case 2:

    dt.Rows.Add(2, "B", "B", "");

    break;

    case 3:

    dt.Rows.Add(3, "C", "C", "");

    break;

    }

     

    this.DetailsView1.DataSource = dt;

    this.DetailsView1.DataBind();

    }

     

    void UpdateUser(int id, string nom, string prenom, string utilisateur)

    {

    this.lblEditResult.Text = String.Format("ID: {0}, Nom: {1}, Prenom: {2}, Utilisateur: {3}", id, nom, prenom, utilisateur);

    }

     

     

    APSX

     

    <form id="form1" runat="server">

    <div>

    <asp:TextBox ID="TxtBoxRecherche1" runat="server" Width="195px"></asp:TextBox><br />

    <asp:TextBox ID="TxtBoxRecherche2" runat="server" Width="195px"></asp:TextBox><br />

    <asp:Button ID="BtnRecherche" runat="server" Text="Rechercher ..." /><br /><br />

    </div>

    <asp:GridView

    ID="Gvtest"

    runat="server"

    CellPadding="4"

    ForeColor="#333333"

    Width="576px"

    AutoGenerateColumns="False"

    Font-Bold="True"

    Font-Names="Arabic Transparent"

    HorizontalAlign="Left"

    DataKeyNames="ID"

    EmptyDataText = "Aucun résultat Trouvé">

    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />

    <RowStyle BackColor="#E3EAEB" BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" />

    <EditRowStyle BackColor="#7C6F57" />

    <SelectedRowStyle BackColor="Gold" Font-Bold="True" ForeColor="#333333" Font-Italic="False" Font-Underline="False" />

    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />

    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" Font-Size="16pt" />

    <AlternatingRowStyle BackColor="White" />

    <Columns>

    <asp:CommandField ShowSelectButton="True" />

    <asp:BoundField DataField="Nom" HeaderText="Nom" />

    <asp:BoundField DataField="Prenom" HeaderText="Prenom" />

    </Columns>

    </asp:GridView>

    <br />

    <aspBig SmileetailsView

    ID="DetailsView1"

    runat="server"

    AutoGenerateRows="False"

    CellPadding="4"

    ForeColor="#333333"

    GridLines="None"

    Height="50px"

    Width="296px" DataKeyNames="ID">

    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

    <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />

    <EditRowStyle BackColor="#2461BF" />

    <RowStyle BackColor="#EFF3FB" />

    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />

    <Fields>

    <asp:BoundField DataField="ID" HeaderText="le ID" ReadOnly="True" SortExpression="ID" />

    <asp:BoundField DataField="Nom" HeaderText="Le Nom" SortExpression="Nom" />

    <asp:BoundField DataField="Prenom" HeaderText="Le Prenom" SortExpression="Prenom" />

    <asp:CommandField ShowEditButton="True" />

    </Fields>

    <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />

    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

    <AlternatingRowStyle BackColor="White" />

    </aspBig SmileetailsView>

    <br />

    <asp:Label ID="lblEditResult" runat="server"></asp:Label>

    </form>

     


    J'espère que ça vous aidera

     

    Guillaume

     

    vendredi 11 janvier 2008 13:41
  • Merci Bcp Guillaume,

     

    je vais voir comment le modifier par rapport à ma BDD, et je te reviendrai aussitôt que possible, j'espère que ça va marcher comme je le souhaite.

     

    merci encore

     

    Alexy

    vendredi 11 janvier 2008 19:23
  •  

    Bonjour Guillaume,

     

    Je viens d’essayer de paramétrer le code par rapport à mon cas de figure.

     

    A la partie « void BindResult() » j’ai intégré mon bloc de recherche comme indiqué sur mon code en bas avec une modification (j’ai remplacé mon Datareader par un Dataset) je ne sais pas vraiment si c’est nécessaire, je peux Binder mon Gvtest avec, mais  au niveau de la partie « void BindDetail()  » je ne vois pas vraiment comment la modifier vu que ce que tu as écrit c’est plutôt statique je veux dire avec des donner fixes et de mon côté il faut que ça tire parti de mon Gvtest.

     

    - Est-ce que tu peux me montrer comment lier cette méthode là « BindDetail() » au Select de mon Gvtest « Gvtest_SelectedIndexChanged » ??

    - Concernant la capture du nom de la session de l'utiliseur, sur l'exemple tu a mis "Utilisateur" tout simplement, pour mon cas dois-je utiliser un "Page.User.Identity.Nme" ?? comment.. si oui que dois-je utiliser comme espace de nom??

     

     

    Ci-dessous ce que j’ai changé au niveau de mon « void BindResult() »

     

    Extrait de code

       

     

        void Gvtest_SelectedIndexChanged(object sender, EventArgs e)

        {

            // bind les données en fonction de la ligne sélectionnée

            this.BindDetail();

        }

     

        void BtnRecherche_Click(object sender, EventArgs e)

        {

            // bind le resultat de la recherche

            this.BindResult();

        }

     

        void BindResult()

        {

            /*DataTable dt = new DataTable();

            dt.Columns.Add("ID", typeof(int));

            dt.Columns.Add("Nom", typeof(string));

            dt.Columns.Add("Prenom", typeof(string));

            dt.Columns.Add("Utilisateur", typeof(string));

            dt.Rows.Add(1, "A", "A", "");

            dt.Rows.Add(2, "B", "B", "");

            dt.Rows.Add(3, "C", "C", "");

           

            this.Gvtest.DataSource = dt;

            this.Gvtest.DataBind();*/

     

            SqlConnection connection = new SqlConnection("Data Source=server;Initial Catalog=TWEM;Persist Security Info=True;User ID=user;Password=passw");

            try

            {

                connection.Open();

            }

            catch (Exception ex)

            {

                lblEditResult.Text = ex.Message;

            }

            try

            {

                string sSql;

                sSql = "SELECT * From TBLTEST Where Nom Like '" + TxtBoxRecherche1.Text + "%' AND Prenom Like '" + TxtBoxRecherche2.Text + "%'";

     

                SqlCommand cmd = new SqlCommand(sSql, connection);

                SqlDataAdapter adapter = new SqlDataAdapter(cmd);

                DataSet ds = new DataSet();

                adapter.Fill(ds, "TBLTSET");

                Gvtest.DataSource = ds;

                Gvtest.DataBind();

                //SqlDataReader reader = cmd.ExecuteReader();

                //Gvtest.DataSource = reader;

                //Gvtest.DataBind();

                //reader.Close();

              

               

     

            }

            catch (Exception ex)

            {

                lblEditResult.Text = ex.Message;

            }

            finally

            {

                connection.Close();

            }  

        }

     

       

       

     

        void BindDetail()

        {

            DataTable dt = new DataTable();

            dt.Columns.Add("ID", typeof(int));

            dt.Columns.Add("Nom", typeof(string));

            dt.Columns.Add("Prenom", typeof(string));

            dt.Columns.Add("Utilisateur", typeof(string));

     

            switch ((int)this.Gvtest.SelectedDataKey.Value)

            {

                case 1:

                    dt.Rows.Add(1, "A", "A", "");

                    break;

                case 2:

                    dt.Rows.Add(2, "B", "B", "");

                    break;

                case 3:

                    dt.Rows.Add(3, "C", "C", "");

                    break;

            }

     

            this.DetailsView1.DataSource = dt;

            this.DetailsView1.DataBind();

        }

     

        void UpdateUser(int id, string nom, string prenom, string utilisateur)

        {

            this.lblEditResult.Text = String.Format("ID: {0}, Nom: {1}, Prenom: {2}, Utilisateur: {3}", id, nom, prenom, utilisateur);

        }

     

     

    ---------------

    Je te rappelle que je débute dans le domaine alors Stp Vas y Molo

     

    Merci encore à toi Guillaume.

     

    Alexy..

     

    Si tu éprouves des difficultés en m'envoyant tes réponses, je te communique mon email: alexy3171@hotmail.com

    samedi 12 janvier 2008 15:10
  • Bonjour,

    D'abord concernant l'utilisateur, vous pouvez effectivement récupérer son nom via la propriété sur l'objet Page "User.Identity.Name". Par contre si vous n'avez pas d'authentification sur votre site vous n'aurez qu'une chaine vide.

     

    Concernant maintenant les GridView et DetailsView, je comprend maintenant un peu mieux ce que vous vouliez. Si j'ai bien compris, lorsque l'on sélectionne une ligne dans le GridView, vous voulez reprendre les données du GridView pour les mettres dans votre DetailsView.

    En asp.net on ne fonctionne pas vraiment comme cela. D'abord concernant l'utilisation d'un couple GirdView/DetailsView, on l'utilise pour n'afficher dans le GridView qu'une partie des données et le DetailsView affiche l'ensemble des données de la ligne sélectionné. Dans ce cas on est bien obligé lors de la sélection d'une ligne du GridView à refaire une requête à la BDD pour avoir toutes les données nécessaire au DetailsView. D'autre par, même si vos données sont bien présente dans le GridView lors d'un postback (retour serveur) elle ne le sont plus sous la forme d'orginie (DataSet, DataTable, etc...) ce qui est assez embêtant pour les lires sachant qu'en plus vous n'aurez qu'une chaine. Voila par exemple comment récupérer le nom de la ligne sélectionnée :

     

    Extrait de code

    ((DataControlFieldCell)this.Gvtest.SelectedRow.Controls[1]).Text

     

     
    Dans l'exemple que je vous avais mis, j'utilisais le code "(int)this.Gvtest.SelectedDataKey.Value" pour récupérer l'id associé à la ligne et ensuite je simulais une requête "SELECT * FROM tbltest WHERE id = ..." pour affecter le résultat au DetailsView.
    Dans l'exemple que vous avez fournit, étant donnée que le DetailsView n'affiche pas de données en plus, il serait à mon avis plus simple d'autoriser l'édition directement sur le GridView. Voila l'exemple modifié :
     

    Extrait de code

    protected void Page_Load(object sender, EventArgs e)

    {

    // les handlers

    this.Gvtest.SelectedIndexChanged += new EventHandler(Gvtest_SelectedIndexChanged);

    this.Gvtest.RowEditing += new GridViewEditEventHandler(Gvtest_RowEditing);

    this.Gvtest.RowUpdating += new GridViewUpdateEventHandler(Gvtest_RowUpdating);

    this.Gvtest.RowCancelingEdit += new GridViewCancelEditEventHandler(Gvtest_RowCancelingEdit);

    this.BtnRecherche.Click += new EventHandler(BtnRecherche_Click);

    }

     

    void Gvtest_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

    {

    this.Gvtest.EditIndex = -1;

    this.BindResult();

    }

     

    void Gvtest_RowUpdating(object sender, GridViewUpdateEventArgs e)

    {

    this.UpdateUser(

    (int)this.Gvtest.DataKeys[e.RowIndex].Value

    , ((TextBox)this.Gvtest.Rows[e.RowIndex].Cells[1].Controls[0]).Text

    , ((TextBox)this.Gvtest.Rows[e.RowIndex].Cells[2].Controls[0]).Text

    , "Utilisateur"

    );

     

    this.Gvtest.EditIndex = -1;

    this.BindResult();

    }

     

    void Gvtest_RowEditing(object sender, GridViewEditEventArgs e)

    {

    this.Gvtest.EditIndex = e.NewEditIndex;

    this.BindResult();

    }

     

     

    Il faut aussi changer de la fichier aspx le colonne Select en Edit.

     

    J'espère que cela vous aidera,

    Guillaume

    mercredi 16 janvier 2008 13:27
  •  

    Salut Guillaume,

     

    merci pour tes réponses, ceci dit il s'agit effectivement d'un affichage partiel des données sur mon Gridview et non pas toutes les colonnes, c'est pour ça que j'aimerai utiliser le Détailsview pour afficher l'ensemble des champs et ce pour Mettre à jour.

     

    concernant l'affichage du username de la sesion windows, je n'arrive pas à le faire afficher sachant que la machine est bien sous domaine. ça ne donne rien.

     

    y a t-il un autre moyen de le faire ?? sachant que je prévois l'utilisation d'une authentification par formulaire avant de pouvoir utiliser la page principale.

     

    merci à toi Guillaume.

     

    Alexy

    mercredi 16 janvier 2008 15:42
  • Bonjour,

    Si vous avez effectivement plus de données à afficher il faut utiliser un DetailsView et donc mettre à jour le contenu de la méthode BindDetail() pour faire un select de toutes les données et faire un bind du résultat sur le DetailsView :

     

    Extrait de code

    void BindDetail()

    {

    using (SqlConnection connection = new SqlConnection("Data Source=server;Initial Catalog=TWEM;Persist Security Info=True;User ID=user;Password=passw"))

    {

    connection.Open();

    string sSql = "SELECT * From TBLTEST Where ID = " + this.Gvtest.SelectedDataKey.Value.ToString();

    SqlCommand cmd = new SqlCommand(sSql, connection);

     

    using (SqlDataReader dr = cmd.ExecuteReader())

    {

    this.DetailsView1.DataSource = dr;

    this.DetailsView1.DataBind();

    }

        }

    }

     

     

    Concernant le username, lorsque vous serez en authentification Forms il n'y aura pas de problème. Pour l'instant si vous êtes sous IIS, vous devez configurer votre site sous IIS pour utiliser l'authentification intégrée pour que votre username corresponde à l'utilisateur windows. Pour cela dans les propriétés du site, dans l'onglet Directory Security, cliquez sur le bouton Edit du premier carde. Dans la nouvelle fenetre, decochez l'acces anonyme et cochez l'authentification intégrée.

     

    Guillaume

    mercredi 16 janvier 2008 16:21
  • Merci Guillaume,

     

    je viens de tester l'authentification comme tu me l'as expliqué et ça affiche effectivement le nom du domaine\nom utilisateur.

     

    ceci dit puisque je vais devoir utiliser une authentification par formulaire, est-ce que je peux utiliser les deux à la fois ou bien là il faudtra changer encore des options coté IIS et biensûr capter le user par formulaire pour l'insrer dans le champ adéquat (sur ma BDD).

     

    merci

     

    Alexy.. 

     

    mercredi 16 janvier 2008 17:03
  • Bonjour,

    Non tu ne pourras pas utiliser les 2 à la fois (dans mon souvenir an tout cas  ). Lorsque tu auras mis en place l'authentification par formulaire, il faudra remettre l'authentification anonyme sous IIS.

    Vous trouverez a l'adresse suivante des explications sur les nouveaux controls en 2.0 pour l'authentification par formulaire :

     

    http://msdn2.microsoft.com/fr-fr/library/ms178329(en-us,VS.85).aspx

     

    Guillaume

    mercredi 16 janvier 2008 17:19
  •  

    justement Guillaume,

     

    dans mon cas je dois fixer une liste de users avec leurs mots de passes respectifs et sans de manière définitives(sans email ni question secrète) , c'est à dire que l'utilisateur ne peut pas changer son mot de passe ni créer son compte par lui même.

     

    tu as un tuyau concernant un exemple dédié à créer une table contenant une liste de users avec possibilité d'appartenance à des profiles differents :??

     

    exemple

     

    utilisateur1 ------> profileA --------> accès sur la page1.aspx

    utilisateur2 ------> profileB --------> accès sur la page2.aspx

     

    merci à toi

     

    Alexy..

    mercredi 16 janvier 2008 18:56
  •  

    Salut Guillaume,

     

    je reviens un peu en arrière pointant sur ta réponse ci-dessus.

     

    - la requête est effectivement bonne, elle renvoi en effet la selection de la ligne désiré depuis le GridView sur mon DétailView (est-ce que tu peux me dire pourquoi tu as changé en "String" la valeur du DataKey séléctionné et ne pas l'avoir laisser en "int" ??)

     

    Extrait de code

    string sSql = "SELECT * From TBLTEST Where ID = " + this.Gvtest.SelectedDataKey.Value.ToString();

     

    SqlCommand cmd = new SqlCommand(sSql, connection);

    SqlDataReader dr = cmd.ExecuteReader();

    this.DetailsView1.DataSource = dr;

    this.DetailsView1.DataBind();

     

     

    - A present il faudra changer le bloc de la méthode "UpdateUser()" pour qu'il puisse affecter les mises à jours faites depuis le DétailsView vers la BDD..

     

    Normalement il faudra utiliser une requette SQL "UPDATE", mais comment ??

     

    j'attendrai ta réponse

     

    merci

     

    Alexy..

    jeudi 17 janvier 2008 13:02
  • Bonjour,

    Desole pour la réponse tardive mais je suis un peu (voir beaucoup  ) débordé en ce moment.

    J'ai mis un String pour DataKey car je veux concatener la chaine representant la requete avec la valeur de DataKey, donc DataKey doit être sous forme de chaine aussi. (La méthode ToString sur un objet de type int renvoi une chaine contenant cette entier).

    Pour la méthode UpdateUser, il faudra effectivement faire une requete SQL UPDATE, voila un exemple :

     

    Extrait de code

    void UpdateUser(int id, string nom, string prenom, string utilisateur)

    {

    using (SqlConnection connection = new SqlConnection("Data Source=server;Initial Catalog=TWEM;Persist Security Info=True;User ID=user;Password=passw"))

    {

    connection.Open();

    string sSql = "UPDATE TBLTEST SET Nom = @Nom, Prenom = @Prenom, Utilisateur = @Utilisateur WHERE ID = @Id";

    SqlCommand cmd = new SqlCommand(sSql, connection);

    cmd.Parameters.Add("@Nom", SqlDbType.VarChar);

    cmd.Parameters["@Nom"] = nom;

    cmd.Parameters.Add("@Prenom", SqlDbType.VarChar);

    cmd.Parameters["@Prenom"] = prenom;

    cmd.Parameters.Add("@Utilisateur", SqlDbType.VarChar);

    cmd.Parameters["@Utilisateur"] = this.User.Identity.Name;

    cmd.Parameters.Add("@Id", SqlDbType.Int);

    cmd.Parameters["@Id"] = id;

     

    cmd.ExecuteNonQuery();

    }

    }

     

     

    J'ai utilisé une syntax avec des paramètres SQL car cela vous permet de ne pas vous embêter avec les doubles ' et la conversion de date en un format compris pas SQL Server par exemple.

     

    Guillaume

    dimanche 20 janvier 2008 20:27
  • Bonjour Guillaume,

     

    Merci bcp pour ta réponse, en effet cette syntaxe est bien plus souple avec une meilleure sécurité des données également.

     

    je vais mettre comme résolu ce sujet là et je crois que je vais ouvrir un autre sujet concernant l'authentification par formulaire, qu'en penses-tu ??  

     

    merci à toi

     

    Alexy .....

     

    mardi 22 janvier 2008 12:35
  • Bonjour,

    Je pense qu'effectivement tes questions sur l'authentification seront mieux dans un autre post 

    Celui là est déjà pas mal long et un nouveau post te permettra de mettre un sujet plus adéquoite

     

    Guillaume

    mardi 22 janvier 2008 13:50
  • Merci Bcp Guillaume,

     

    je vais ouvrir un autre post concernant l'utilisation de la partie "Authentification et profile" et j'espère bien que c'est toi qui me répondra toujours comme d'habitude  

     

    sur l'autre post alors

     

    merci

     

    Alexy....

    mercredi 23 janvier 2008 10:55