Sélectionner une ligne d'un gridview sans commandField

teatsx Messages postés 5 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 23 janvier 2008 - 22 janv. 2008 à 18:23
teatsx Messages postés 5 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 23 janvier 2008 - 23 janv. 2008 à 17:27
Bonjour

J'aimerais savoir si il est possible d'avoir les informations d'une ligne d'un gridview sans passer par les boutons du commandField.

Actuellement mon gridview fonctionne très bien avec la colonne CommandField pour sélectionner la ligne mais je désire également obtenir les informations d'une ligne en cliquant dessus et non sur les bouton du CommandField.

Cela est il possible ?

Je n'ai pas trouvé grand chose sur les forums ( peut être je cherche mal )

Merci d'avance pour vos réponses

Bonne journée

 kikou - teatsx <img src="/imgs2/smile_sleepy

4 réponses

gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
22 janv. 2008 à 21:04
Tu mets un element qui a un commandargument égal à "select" essaie un linkbutton par exemple.

-- Grégoire
0
zuff Messages postés 79 Date d'inscription lundi 28 octobre 2002 Statut Membre Dernière intervention 21 octobre 2008
23 janv. 2008 à 14:35
Personnellement, je cache le CommandField :

<asp:CommandField
ShowSelectButton="True">
<HeaderStyle
CssClass="ColonneSelect"
/>
<ItemStyle
CssClass="ColonneSelect"
/>
</asp:CommandField>

Dans ma feuille de style :
.ColonneSelect

{

display:
none;
}

après je m'amuse avec le prerender pour faire ma présentation :

    protected void gvListeUser_PreRender(object sender, EventArgs e)
    {        //    gestion de l'affichage
        //Int32 i;
        gvListeUser.DataBind();
        if (gvListeUser.Rows.Count > 0)
        {
            for (Int32 i = 0; i < gvListeUser.Rows.Count; i++)
            {
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[1].Text.Trim(), i, 5, 1);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[2].Text.Trim(), i, 15, 2);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[3].Text.Trim(), i, 15, 3);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[4].Text.Trim(), i, 10, 4);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[5].Text.Trim(), i, 20, 5);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[6].Text.Trim(), i, 10, 6);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[7].Text.Trim(), i, 20, 7);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[8].Text.Trim(), i, 5, 8);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[9].Text.Trim(), i, 5, 9);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[10].Text.Trim(), i, 5, 10);
                MiseEnLigneLienTableau( gvListeUser.Rows[i].Cells[11].Text.Trim(), i, 5, 11);
            }
        }

    }

    protected void MiseEnLigneLienTableau(string TexteDepart, Int32 Index, Int32 Longueur, Int32 CelluleLigne)
    {
        //    ' mise en page d'une cellule Lien du gridview
        //    ' TexteDepart : texte de la base de donnée
        //    ' Index : ligne du tableau (sert pour faire le lien qui déclenche un SelectedIndexChanged sur GridView)
        //    ' Longueur : Longueur maximun avant découpage
        //    ' CelluleLigne : La cellule de la ligne

        String TexteModifie = "";

        TexteDepart = TexteDepart.Replace("&#233;", "é");
        TexteDepart = TexteDepart.Replace("&#201;", "É");
        TexteDepart = TexteDepart.Replace("&#200;", "È");
        TexteDepart = TexteDepart.Replace("&#232;", "è");
        TexteDepart = TexteDepart.Replace("&#234;", "ê");
        TexteDepart = TexteDepart.Replace("&#224;", "à");
        TexteDepart = TexteDepart.Replace("&#226;", "â");
        TexteDepart = TexteDepart.Replace("&#238;", "î");
        TexteDepart = TexteDepart.Replace("&#244;", "ô");
        TexteDepart = TexteDepart.Replace("&#212;", "Ô");
        TexteDepart = TexteDepart.Replace("&#251;", "û");
        TexteDepart = TexteDepart.Replace("&#235;", "ë");
        TexteDepart = TexteDepart.Replace("&#231;", "ç");
        TexteDepart = TexteDepart.Replace("&amp;", "&");
        TexteDepart = TexteDepart.Replace("&#176;", "°");
        TexteDepart = TexteDepart.Replace("`", "'");

        if (TexteDepart.Length > Longueur + 3)
        {
            TexteModifie = TexteDepart.Substring(0, Longueur) + "...";
        }
        else
        {
            TexteModifie = TexteDepart;
        }

        gvListeUser.Rows[Index].Cells[CelluleLigne].Text = TexteModifie;
        gvListeUser.Rows[Index].Cells[CelluleLigne].Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(gvListeUser, "Select$" + Index.ToString()));
        gvListeUser.Rows[Index].Cells[CelluleLigne].Attributes.Add("onMouseOver", "this.style.cursor='hand';");
        if (TexteDepart != "" & TexteModifie != TexteDepart)
        {
            gvListeUser.Rows[Index].Cells[CelluleLigne].ToolTip = TexteDepart;
        }

    }
0
teatsx Messages postés 5 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 23 janvier 2008
23 janv. 2008 à 16:10
Bonjour

Merci pour les réponses

Grégoire, ta solution revient à ajouter un bouton en plus. Ce que je veux, c'est de cliquer directement sur les données affichées (cliquer sur la row) pour obtenir les informations de la ligne sans ajouter un bouton donc sans CommandField, ni de commandName(linkbutton). Si je rajoute un linkbutton, autant que je garde la colonne CommandField


La soluce de zuff a l'air intéréssante (un peu complexe pour moi qui suis débutant ), je vais essayer pour voir


Je vous tiens au courant.

Merci encore

Passer une bonne journée

 kikou - teatsx <img src="/imgs2/smile_sleepy
0
teatsx Messages postés 5 Date d'inscription jeudi 17 août 2006 Statut Membre Dernière intervention 23 janvier 2008
23 janv. 2008 à 17:27
La soluce zuff a presque marché, zut

Lorsque je clique sur le texte des données de mon gridview gdvSession j'ai bien l'évenement gdvSession_SelectedIndexChanged qui est executé. Cette évenement m'affiche bien mon Tab Extender d'Ajax qui contient plusieurs gridView.

Jusque là tout va bien mais il y a un hic, mon gridView gdvSession sur lequel j'ai cliqué n'est plus là (n'est plus affiché). J'ai seulement mon Tab Extender d'Ajax qui est affiché.

 ca vient peut être du pre_render qui ne recharge pas mon gridView gdvSession.
Je creuse la question .

Si vous avez une idée, vous êtes la bienvenue

Merci

Bonne journée

 kikou - teatsx <img src="/imgs2/smile_sleepy
0
Rejoignez-nous