begin process at 2008 08 30 01:07:12
1 233 969 membres
8 nouveaux aujourd'hui
14 294 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : correspondance entre datakey et index ds un Gridview [ WebForms / WebControl ] (herve_labenere)

correspondance entre datakey et index ds un Gridview le 01/02/2008 17:04:34

herve_labenere
Bonsoir,

Je tente de mettre en place un moteur de recherche sur mon application de suivi des marchés :
Un champs texte en haut à droite, qui liste ds une 2nd page les marchés et les
projets en rapport avec le mot recherché.
Cette page de résultat doit rediriger vers le listing des marchés
(marchés.aspx), s'il s'agit d'un marché, ou le listing des
projets(affaires.aspx) s'il s'agit d'un projet.
Donc je fais un lien avec en paramètre l'ID du marché recherché et trouvé. Ex :
marchés.aspx?id=789
Du coup ds la page marchés.aspx, j'ai le code suivant ds le load de la page :
int id_marche = Int32.Parse(Request.Querystring["id"]

Jusqu'ici pas de problème.

Mais comment faire pour sélectionner la ligne correspondante ds mon listiing (Gridview) des
marchés ?
Il y a bien une propriété Gridview.SelectedDatakey, mais c'est en lecture seule.
Sinon, il y a Gridview.SelectedIndex, qui est en lecture et en écriture, mais
comment alors obtenir la correspondance entre la clef primaire d'une ligne et
l'index de cette ligne ???

Je suis obligé pour l'instant, de faire une boucle, de parcourir le gridview et
si le champs de la colonne ID = l'id marché récupéré du querystring
Mais ça n'est pas non plus satisfaisant, car si la ligne du marché se trouve ds
la 2nd page de mon gridview, il ne la trouve pas...

Voici le code
------------
  if (Request.QueryString["id"] != null)
        {
            int id_marché = Int32.Parse(Request.QueryString["id"]);


            #region "Correspondance id / index"

            int index_marché = 0;

            while (gvMec.PageIndex < gvMec.PageCount)
            {
                foreach (GridViewRow gvrow in gvMec.Rows)
                {
                    if (gvrow.Cells[0].Text == id_marché.ToString())
                    {
                        index_marché = gvrow.DataItemIndex;
                        break;
                    }
                }
                gvMec.PageIndex++;
            }



                gvMec.SelectedIndex = index_marché;
              #endregion

       }

Herwin

Re : correspondance entre datakey et index ds un Gridview le 02/02/2008 08:04:27

poulouf
Salut,
tu peux le faire au binding de la gridview,
en parcourant les items et vérifiant qu'ils correspodent ou pas a tes données,
tu lance un select() quand tu as trouvé le bon...

Re : correspondance entre datakey et index ds un Gridview le 02/02/2008 11:45:33

herve_labenere
Merci pour cette piste,
Mais qu'entends-tu par "le faire au binding de la gridview".
Ca m'interesse beaucoup, mais je ne vois paq trop le code que cela donnerait.

Peux-tu m'en donner une idée

Merci d'avance,
Herwin

Re : correspondance entre datakey et index ds un Gridview le 02/02/2008 15:09:13

poulouf
Réponse acceptée !
un exemple rapide que tu peux tester chez toi :) :

 protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.DataBound +=new EventHandler(GridView1_DataBound);
        List<string> oList = new List<string>();
        oList.Add("toto");
        oList.Add("tata");
        oList.Add("titi");
        GridView1.DataSource = oList;
        GridView1.DataBind();
}

void GridView1_DataBound(object sender, EventArgs e)
{
        List<string> oList = ((GridView)sender).DataSource as List<string>;
        for (int i = 0; i < oList.Count; i ++)
        {
            //fair qqch
            if (oList[i] == "titi")
            {
                GridView1.SelectedIndex = i;
                break;
            }
       }
}

facile a transposer sur ton cas...

Re : correspondance entre datakey et index ds un Gridview le 02/02/2008 15:15:49

poulouf
pardon, je me suis un peu enflammé, j avais mal lu,
je crois que de plus les gridview sur plusieurs page l index ne reprend pas a 0,
donc nbpage * taille page + index...

enfin le databindind est toujours bon a prendre :)

Re : correspondance entre datakey et index ds un Gridview le 19/02/2008 18:34:08

TOzZ

salut poulouf,
j'ai repris ton code ci-dessus pour la correspondance id et index
<code>
#region "Correspondance id / index"

int idx = -1;
while (this.GridView1.PageIndex < this.GridView1.PageCount)
{
   
foreach (GridViewRow gvrow inthis.GridView1.Rows)
   {
      
if (gvrow.Cells[0].Text == result.ToString())
      {
         idx = gvrow.DataItemIndex;
         
break;
      }
   }
   GridView1.PageIndex++;
}
GridView1.SelectedIndex = idx;

#endregion


</code>

et tu dis t'être un peu enflammé... nbpage * taille page + index...
peux-tu complèter le bout de code avec ta solution (nbpage * taille page + index...)?

merci d'avance
TOzZ

Re : correspondance entre datakey et index ds un Gridview le 25/03/2008 08:17:24

poulouf
Salut,
c'était juste pour positionner la gridview
sur la bonne page (en fonction du nombre de données et tout ca...)
tu dois avoir bonnepage = index/taillepage avec le select dans le databind,

perso je suis pas fan du paging sur les gridview, même si ça a son avantage
dans le cas de tri alphabétique et quand il y a beaucoup de données...

Bon courage et désolé pour le temps de réponse...





Classé sous : id, gridview, ds, index, marché

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

Snippets en rapport

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS