IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Trier un GridView


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut Trier un GridView
    Salut à tous,

    Depuis quelques jours j'ai un problème que je ne sais pas régler.

    J'ai un TextBox qui me permet de saisir du un nom de client et de faire une recherche dans la base de données lorsque je clique sur le Button. C'est donc le Button qui lance l'évènement qui va s'occuper de rechercher dans la base de données. Mais comme c'est pas la responsabilité du Button de faire ça lui-même, j'ai créé une méthode private SqlDataReader SearchGrid(string str) qui quand elle est appelé par l'évènement Click sur le bouton me renvoi mon SqlDataReader que je charge dans le DataSource de mon GridView et je fini avec un DataBind. J'espère avoir été assez précis sinon voilà le lien qui m'à inspiré sauf qu'au lieu d'utiliser une DropDownlist j'utilise un TextBox C# DetailsView Editing

    Pour corser le tout j'ai lié un DetailsView qui apparait lorsque je clique sur le lien séléctionner de chaque enregistrement.

    Mon gros problème est que j'ai passé les paramètres du GridView sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AllowSorting="True"
    OnSorted="GridSearch_Sorted"
    Et j'ai aussi modifié SortExpression de mes deux BoundField car on peut les trier par ID ou par Nom, donc quand je click sur l'un ou l'autre il me trie en Ascending et en Descending.
    Par contre je n'arrive pas à récupérer les valeur de mes BoundField.SortExpression pour pouvoir effectuer le trie suivant le lien qu'on clique et je ne vois vraiment pas comment faire

    Si quelqu'un pouvait m'aider je serais vraiment heureu
    Voici mon code en détail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <table>
            <tr>
                <td>Nom : </td>
                <td><asp:TextBox ID="SearchTxt" runat="server"></asp:TextBox></td>
            </tr>
            <tr>
                <td colspan="2"><asp:Button ID="SearchBtn" runat="server" Text="search" OnClick="SearchBtn_Click"/></td>
            </tr>
        </table>    
            <asp:GridView ID="GridSearch" runat="server"
                            AllowSorting="True"                
                            DataKeyNames="ID_CLIENT_GC"
                            AutoGenerateColumns="False"
                            OnSelectedIndexChanged="GridSearch_SelectedIndexChanged"
                            OnSorting="GridSearch_Sorted"
                            OnSorted="GridSearch_Sorted"
                            EmptyDataText="Aucun resultat"
                            Width="427px">
            <Columns>
            <asp:BoundField DataField="ID_CLIENT_GC"
                                  HeaderText="ID CLIENT"
                                  ReadOnly="True"
                                  SortExpression="ID_CLIENT_GC" />
            <asp:BoundField DataField="NOM_CLIENT_GC"
                                  HeaderText="NOM CLIENT"
                                  SortExpression="NOM_CLIENT_GC" />
            <asp:CommandField ShowSelectButton="True" />
            </Columns>
            </asp:GridView>
            <br />
            <br />
            <asp:DetailsView ID="DetailsSearch" runat="server" AutoGenerateRows="False" DataKeyNames="ID_CLIENT_GC"
                DataSourceID="SqlSearch" Height="50px" Width="125px">
                <Fields>
                    <asp:BoundField DataField="ID_CLIENT_GC" HeaderText="ID_CLIENT_GC" InsertVisible="False"
                        ReadOnly="True" SortExpression="ID_CLIENT_GC" />
                    <asp:BoundField DataField="NOM_CLIENT_GC" HeaderText="NOM_CLIENT_GC" SortExpression="NOM_CLIENT_GC" />
                    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True"  />
                </Fields>
            </asp:DetailsView>
            <asp:SqlDataSource ID="SqlSearch" runat="server" ConnectionString="<%$ ConnectionStrings:GRA_TEST_DEZIGNConnectionString %>"
                DeleteCommand="DELETE FROM [GRA_CLIENT] WHERE [ID_CLIENT_GC] = @ID_CLIENT_GC"
                InsertCommand="INSERT INTO [GRA_CLIENT] ([NOM_CLIENT_GC]) VALUES (@NOM_CLIENT_GC)"
                SelectCommand="SELECT [ID_CLIENT_GC], [NOM_CLIENT_GC] FROM [GRA_CLIENT] WHERE ([ID_CLIENT_GC] = @ID_CLIENT_GC)"
                UpdateCommand="UPDATE [GRA_CLIENT] SET [NOM_CLIENT_GC] = @NOM_CLIENT_GC WHERE [ID_CLIENT_GC] = @ID_CLIENT_GC">
                <SelectParameters>
                <asp:ControlParameter ControlID="GridSearch"
                                      Name="ID_CLIENT_GC"
                                      PropertyName="SelectedValue"
                                      Type="Int32" />
                </SelectParameters>
                <DeleteParameters>
                    <asp:Parameter Name="ID_CLIENT_GC" Type="Int32" />
                </DeleteParameters>
                <UpdateParameters>
                    <asp:Parameter Name="NOM_CLIENT_GC" Type="String" />
                    <asp:Parameter Name="ID_CLIENT_GC" Type="Int32" />
                </UpdateParameters>
                <InsertParameters>
                    <asp:Parameter Name="NOM_CLIENT_GC" Type="String" />
                </InsertParameters>
            </asp:SqlDataSource>
            <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    Et la partie C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    //Constante pour la chaine de connexion
        const string C_STRING = "machaine de connexion";
     
        protected void DetailsSearch_ItemUpdated(Object sender, System.Web.UI.WebControls.DetailsViewUpdatedEventArgs e)
        {
            GridSearch.DataBind();
        }
        protected void DetailsSearch_PageIndexChanging(object sender, DetailsViewPageEventArgs e)
        {
            GridSearch.DataBind();
        }
        protected void GridSearch_SelectedIndexChanged(object sender, EventArgs e)
        {
     
            DetailsSearch.ChangeMode(DetailsViewMode.Edit);
        }
        protected void GridSearch_PageIndexChanged(object sender, EventArgs e)
        {
            DetailsSearch.ChangeMode(DetailsViewMode.ReadOnly);
        }
     
        protected void GridSearch_Sorted(object sender, EventArgs e)
        {
            DetailsSearch.ChangeMode(DetailsViewMode.Edit);
            Label1.Text = "Trie";
     
        }
     
        /************************************************************************************/
        //Fonction hasardeuse mais qui marche à condition de pas mettre de try catch :-) 
         private SqlDataReader SearchGrid(string str)
        {
            //La chaine de la requête qui va permettre la recherche
            string sqlSearch = "SELECT * FROM GRA_CLIENT WHERE NOM_CLIENT_GC LIKE'" + str + "%' ORDER BY NOM_CLIENT_GC";
            SqlCommand clientSqlCommand;
            SqlDataReader clientSqlDataReader;
            SqlConnection clientSqlConnection = new SqlConnection();
            GridView searchClientGrid = new GridView();
     
            clientSqlConnection.ConnectionString = C_STRING;
            clientSqlCommand = new SqlCommand(sqlSearch, clientSqlConnection);
            clientSqlConnection.Open();
            clientSqlDataReader = clientSqlCommand.ExecuteReader();
            return clientSqlDataReader;
        }
     
        protected void SearchBtn_Click(object sender, EventArgs e)
        {
            GridSearch.DataSource = SearchGrid(SearchTxt.Text);
            GridSearch.DataBind();
        }
    Voilà si des fois ça en inspire plus d'un. Merci pour votre aide

  2. #2
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Salut à tous,

    D'ailleurs je salue my self aussi tant qu'à faire puisque je me donne la réponse à moi même

    A trop vouloir m'inspirer des autres on finit par faire n'importe quoi je suis donc reparti de 0 ... et je me suis rendu compte que c'était plus facile que ce que je croyais

    Pour le code ASPX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="src.aspx.cs" Inherits="src" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Page sans titre</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>            
                <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">Nouveau client</asp:LinkButton>
                <asp:TextBox ID="searchTxt" runat="server"></asp:TextBox>
                <asp:Button ID="searchBtn" runat="server" Text="search" OnClick="searchBtn_Click" />
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID_CLIENT_GC" DataSourceID="SqlDataSource1" AllowPaging="True" PageSize="5" AllowSorting="True" EmptyDataText="Aucun résultat trouvé" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnSorted="GridView1_Sorted" OnPageIndexChanged="GridView1_OnPageIndexChanged">
                    <Columns>                    
                        <asp:BoundField DataField="ID_CLIENT_GC" HeaderText="ID_CLIENT_GC" InsertVisible="False"
                            ReadOnly="True" SortExpression="ID_CLIENT_GC" />
                        <asp:BoundField DataField="NOM_CLIENT_GC" HeaderText="NOM_CLIENT_GC" SortExpression="NOM_CLIENT_GC" />
                        <asp:CommandField ShowSelectButton="True" ShowDeleteButton="true" />
                    </Columns>
                </asp:GridView>
                <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:GRA_TEST_DEZIGNConnectionString %>"
                DeleteCommand="DELETE FROM [GRA_CLIENT] WHERE [ID_CLIENT_GC] = @ID_CLIENT_GC" OnDeleting="SqlDataSource1_Deleting">
                    <DeleteParameters>
                        <asp:Parameter Name="ID_CLIENT_GC" Type="Int32" />
                    </DeleteParameters>
                    <UpdateParameters>
                        <asp:Parameter Name="NOM_CLIENT_GC" Type="String" />
                        <asp:Parameter Name="ID_CLIENT_GC" Type="Int32" />
                    </UpdateParameters>
                    <InsertParameters>
                        <asp:Parameter Name="NOM_CLIENT_GC" Type="String" />
                    </InsertParameters>
     
                    </asp:SqlDataSource>
                <asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" AutoGenerateRows="False" DataKeyNames="ID_CLIENT_GC" DataSourceID="SqlDataSource2" OnItemUpdated="DetailsView1_ItemUpdated" Visible="False" OnItemCommand="DetailsView1_ItemCommand">
                    <Fields>
                        <asp:BoundField DataField="ID_CLIENT_GC" HeaderText="ID_CLIENT_GC" InsertVisible="False"
                            ReadOnly="True" SortExpression="ID_CLIENT_GC" />
                        <asp:BoundField DataField="NOM_CLIENT_GC" HeaderText="NOM_CLIENT_GC" SortExpression="NOM_CLIENT_GC" />
                        <asp:CommandField ShowEditButton="True"  />
                    </Fields>
            </asp:DetailsView>
                <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:GRA_TEST_DEZIGNConnectionString %>"
                    DeleteCommand="DELETE FROM [GRA_CLIENT] WHERE [ID_CLIENT_GC] = @ID_CLIENT_GC"
                    InsertCommand="INSERT INTO [GRA_CLIENT] ([NOM_CLIENT_GC]) VALUES (@NOM_CLIENT_GC)"
                    SelectCommand="SELECT * FROM [GRA_CLIENT] WHERE [ID_CLIENT_GC] = @ID_CLIENT_GC"
                    UpdateCommand="UPDATE [GRA_CLIENT] SET [NOM_CLIENT_GC] = @NOM_CLIENT_GC WHERE [ID_CLIENT_GC] = @ID_CLIENT_GC">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="GridView1"
                                      Name="ID_CLIENT_GC"
                                      PropertyName="SelectedValue"
                                      Type="Int32" />
                     </SelectParameters>
                    <DeleteParameters>
                        <asp:Parameter Name="ID_CLIENT_GC" Type="Int32" />
                    </DeleteParameters>
                    <UpdateParameters>
                        <asp:Parameter Name="NOM_CLIENT_GC" Type="String" />
                        <asp:Parameter Name="ID_CLIENT_GC" Type="Int32" />
                    </UpdateParameters>
                    <InsertParameters>
                        <asp:Parameter Name="NOM_CLIENT_GC" Type="String" />
                    </InsertParameters>
                </asp:SqlDataSource>
                <asp:DetailsView ID="DetailsView2" runat="server" AutoGenerateRows="False" DataKeyNames="NOM_CLIENT_GC" 
                    DataSourceID="SqlDataSource3" Visible="false" OnItemCommand="DetailsView2_ItemCommand">
                    <Fields>
                        <asp:BoundField DataField="NOM_CLIENT_GC" HeaderText="NOM_CLIENT_GC" SortExpression="NOM_CLIENT_GC" />
                        <asp:CommandField ShowInsertButton="True" />
                    </Fields>
                </asp:DetailsView>
                <asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:GRA_TEST_DEZIGNConnectionString %>"
                    InsertCommand="INSERT INTO [GRA_CLIENT] ([NOM_CLIENT_GC]) VALUES (@NOM_CLIENT_GC)"
                    SelectCommand="SELECT [NOM_CLIENT_GC] FROM [GRA_CLIENT]">
                    <InsertParameters>
                        <asp:Parameter Name="NOM_CLIENT_GC" Type="String" />
                    </InsertParameters>
                </asp:SqlDataSource>       
            </div>
        </form>
    </body>
    </html>
    Pour le Code C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Text;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
     
    public partial class src : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
     
        }
        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            DetailsView2.Visible = true;
            DetailsView2.ChangeMode(DetailsViewMode.Insert);
        }
        protected void searchBtn_Click(object sender, EventArgs e)
        {  
           searchTxt.Text = searchTxt.Text;
           SqlDataSource1.SelectCommand = "SELECT * FROM GRA_CLIENT WHERE NOM_CLIENT_GC LIKE'" + searchTxt.Text + "%' ORDER BY NOM_CLIENT_GC";
        }
        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            DetailsView1.Visible= true;
            DetailsView1.ChangeMode(DetailsViewMode.Edit);
        }
        protected void GridView1_Sorted(object sender, EventArgs e)
        {
            SqlDataSource1.SelectCommand = "SELECT * FROM GRA_CLIENT WHERE NOM_CLIENT_GC LIKE'" + searchTxt.Text + "%' ORDER BY NOM_CLIENT_GC";
        }
        protected void GridView1_OnPageIndexChanged(object sender, EventArgs e)
        {
            SqlDataSource1.SelectCommand = "SELECT * FROM GRA_CLIENT WHERE NOM_CLIENT_GC LIKE'" + searchTxt.Text + "%' ORDER BY NOM_CLIENT_GC";
        }
        protected void DetailsView1_ItemUpdated(object sender, System.Web.UI.WebControls.DetailsViewUpdatedEventArgs e)
        {
            GridView1.DataBind();
            SqlDataSource1.SelectCommand = "SELECT * FROM GRA_CLIENT WHERE NOM_CLIENT_GC LIKE'" + searchTxt.Text + "%' ORDER BY NOM_CLIENT_GC";
        }
        protected void DetailsView1_ItemCommand(object sender, System.Web.UI.WebControls.DetailsViewCommandEventArgs e)
        {
            DetailsView1.Visible = false;
        }
        protected void DetailsView2_ItemCommand(object sender, System.Web.UI.WebControls.DetailsViewCommandEventArgs e)
        {
            DetailsView2.Visible = false;
        }
        protected void SqlDataSource1_Deleting(object sender, EventArgs e)
        {
            SqlDataSource1.SelectCommand = "SELECT * FROM GRA_CLIENT WHERE NOM_CLIENT_GC LIKE'" + searchTxt.Text + "%' ORDER BY NOM_CLIENT_GC";
        }
    }
    Il faut dire que j'étais vraiment inspiré ce matin
    Je vais enlever les requête en dur et je vais passer par une méthode ou une class qui regroupera toute les requête...

    Par contre, quelqu'un saurait-il comment faire un message de confirmation lors de la suppression d'un enregistrement avec un boite de dialogue Javascript ?
    J'ai consulté pleins de liens, mais c'était des solutions trop compliqué

    Merci pour votre aide.
    Si vous réutilisez cette source n'oubliez pas de me dire merci

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pour ta requête SQL, utilise des paramètres SQL plutot que de concaténer directement la valeur.
    Explication ici : http://johannblais.developpez.com/tu...acces-donnees/

    Et si c'est résolu :

    EDIT : Correction du lien.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Salut SaumonAgile,

    Merci pour ton aide, je vais essayer de faire selon tes conseils

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment trier un gridview ?
    Par cortex024 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 09/05/2007, 16h03
  2. Trier une GridView en cliquant sur une colonne
    Par rfaouzi dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/02/2007, 21h22
  3. [VB.Net 2.0] Comment trier un GridView ?
    Par Dadou74 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 27/09/2006, 17h33
  4. Réponses: 4
    Dernier message: 17/05/2006, 15h11
  5. [C#] Comment trier un GridView ?
    Par Allen dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/04/2006, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo