Substring

Résolu
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010 - 27 mai 2009 à 16:07
 nhervagault - 28 mai 2009 à 20:26
Bonjour,
j'ai un gridview et j'affiche des mail sur la colonne5 par exemple.
Comment je peux lui dire d'afficher que le texte à droite de @ des lignes de toute la colonne?
Merci d'avance.
A voir également:

21 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
28 mai 2009 à 14:57
@Bidou
"Non c'est pas une bonne solution (même assez mauvaise), car si y'a pas de @ c'est le crash assuré."
=> C'est évident qu'avec mon code, il faut faire des vérifications. Je cherchais juste à donner une réponse rapide et viable, qu'il pouvait facilement tester.
Mais d'un autre côté, dans ton 1er code, si myString est null, c'est également le crash assuré. Tu considère juste qu'il a vérifié que son string n'était pas null, comme moi j'ai considéré que son string avait le format d'une adresse email.


Mais sinon,

string s = e.Row.Cells[4].Text;

string[] tab = s.Split('@');

e.Row.Cells[4].Text = tab[tab.Length-1];

marche aussi.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
3
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
27 mai 2009 à 17:02
Au fait j'ai fait un truc du style:
 if (e.Row.RowType == DataControlRowType.DataRow)
            {
                          e.Row.Cells[5].Text = e.Row.Cells[5].Text.Substring(e.Row.Cells[5].Text.IndexOf("@") + 1);

            }
 
Mais ça ne change rien, si vous pouvez m'aider
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
27 mai 2009 à 17:50
Salut

Tu peux essayer d'utiliser la méthode Split() de la classe string, qui te "coupe" ton string en tableau de strings (en effaçant le caractère de séparation)
> e.Row.Cells[5].Text e.Row.Cells[5].Text.Split('@')[1];

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
27 mai 2009 à 17:58
J'ai essayé mais ça ne marche pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
27 mai 2009 à 18:09
J'ai aussi entendu dire que le Split utilisé directement comme ça peut faire exploser... s'il ne trouve pas de @.Apparemment il vaut mieux utiliser une variable avant .
Pouvez-vous me dire comment faire?
Merci.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
27 mai 2009 à 20:51
Salut,
Tu peux faire comme ça par exemple:

string s = myString.Substring(0, myString.IndexOfOrDefault(
"@", myString.Length));

public
static
class
Extension
{
  
public
static
int IndexOfOrDefault(
this
string text,
string value,
int def)
   {
     
int index = text.IndexOf(value);
     
return index > -1 ? index : def;
   }
}

<hr />
-Blog-
-Site Perso-
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
27 mai 2009 à 22:57
Et comment je peux adapter, le code que tu m'as donné (Bidou) par rapport à ce que j'ai?:
e.Row.Cells[4].Text = e.Row.Cells[4].Text.Split('@')[1];
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 mai 2009 à 07:42
string s =  e.Row.Cells[4].Text;
e.Row.Cells[4].Text = s.Substring(0, s.IndexOfOrDefault("@"
, s.Length));

<hr />
-Blog-
-Site Perso-
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
28 mai 2009 à 09:43
IndexOfOrDefault n'existe pas, j'ai essayé comme suit mais ça affiche toujours tout, ça n'affiche pas juste ce qui est après @:
 protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
        {
          
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string s = e.Row.Cells[4].Text;
                e.Row.Cells[4].Text = s.Substring(0, s.IndexOf("@", s.Length));
            }
        }
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 mai 2009 à 09:56
Le code que je t'ai donné est correct tu as oublié de copier/coller la deuxième partie du code que je t'ai donné!

public static class Extension...

<hr />
-Blog-
-Site Perso-
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
28 mai 2009 à 09:57
O fait j'ai fait comme suit mais il ne voit pas IndexOfDefault:
public static class Extension
        {
            public int IndexOfOrDefault(this string text, string value, int def)
            {
                int index = text.IndexOf(value);
                return index > -1 ? index : def;
            }
        }
    protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
        {
          
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
          
                string s = e.Row.Cells[4].Text;
                e.Row.Cells[4].Text = s.Substring(0, s.IndexOfOrDefault("@", s.Length));
     
            }

        }
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
28 mai 2009 à 10:38
Quand je fais du pas à pas j'ai bienle texte après le @ mais au moment de l'affichage du gridview, il ne l'affiche pas. Peut etre qu'il y a quelque  chose qui m'échappe ou j'ai mal utilisé le gridview_rowdatabound? Je dois faire un truc dans le load?
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
28 mai 2009 à 10:46
Autant pour moi, ça marche avec ça:
string s = e.Row.Cells[4].Text;
            e.Row.Cells[4].Text = s.Split('@')[1];

Merci de votre aide.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 mai 2009 à 12:38
Non c'est pas une bonne solution (même assez mauvaise), car si y'a pas de @ c'est le crash assuré.
Réessaye avec le code que je t'ai donné... un peu de persévérance bon sang !

<hr />
-Blog-
-Site Perso-
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
28 mai 2009 à 14:26
Sisi, j'ai bien mis ce que tu m'as donné mais au niveau du GridView1_RowDataBound, il ne reconnait pas IndexOfOrDefault. C'est pour ça que je ne l'ai pas utilisé à moins que tu vois pourquoi il ne le reconnait pas?
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
28 mai 2009 à 15:02
@ddove53 : IndexOrDefault doit être statique !
public static int IndexOfOrDefault(this string text, string value, int def)
{
    // blablabla
}

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
28 mai 2009 à 15:11
J'ai bien mis le static mais je ne sais pas pourquoi il le reconnait pas dans GridView1_RowDataBound
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 mai 2009 à 15:32
Oui tu as raison, on devrait aussi faire un test pour voir si c'est null !
Cependant, c'est quand même un peu différent: une fois on a une valeur null (donc une valeur spécialement remplie) alors que dans l'autre cas, c'est une string comme une autre, sauf qu'elle n'a pa de "@". Il suffit qu'un gus ait mal introduit son mail et c'est cuit.

Ca n'empêche pas que mon code manquait de rigueur.
Et puis les Extensions Methods, c'est quelque chose que j'apprécie moyennement...

<hr />
-Blog-
-Site Perso-
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
28 mai 2009 à 15:49
"Ca n'empêche pas que mon code manquait de rigueur."
=> De toutes façons, on sait qu'il ne faut pas accéder aux méthodes / propriétés d'un objet null. On sait qu'il ne faut pas dépasser la limite d'un tableau. On sait qu'il ne faut pas diviser par 0...
A quoi bon le préciser à chaque fois ? Et d'un autre côté, si la personne au contraire ne le sait pas, ça lui permettra de l'apprendre.

De toutes façons, 99% des codes que l'on fournit ne sont pas parfaitement blindés. Mais comme le précise le règlement, on n'est pas là pour faire le boulot des autres à leur place, on est juste là pour les aider. Si quelqu'un demande comment blinder son code, on cherchera à la blinder au max. Mais je ne trouve pas qu'il soit utile de blinder absolument tout code qu'on donne.

Si ça se trouve, son code se trouve dans un bloc if du genre
if(str != null && str.Contains('@'))
et si ce n'est pas le cas, il rajoutera ça le jour où il rencontrera une erreur.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
28 mai 2009 à 16:00
Effectivement, je l'ai fait dans un bloc de test If mais je ne l'avais pas précisé en posant une question.
0
Rejoignez-nous