ddove53
Messages postés623Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention15 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.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 ! -
ddove53
Messages postés623Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention15 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);
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 ! -
ddove53
Messages postés623Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention15 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.
ddove53
Messages postés623Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention15 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));
}
}
ddove53
Messages postés623Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention15 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));
ddove53
Messages postés623Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention15 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?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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 !
ddove53
Messages postés623Date d'inscriptionmardi 20 mars 2007StatutMembreDernière intervention15 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?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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...
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 ! -