Mon monde en .NET - ASP.NET - Commentaires2023-01-02T14:25:42+01:00Thierry Thouaurn:md5:feacb53e7f5d22db05e2d6025a495e81DotclearConserver le "tab" courant en cas de postback avec JQuery UI Tabs - https://zippocaocap.com/urn:md5:81dd5b6fcc7fd199e7702714836501eb2018-07-18T18:44:30+02:002018-07-18T17:44:30+02:00https://zippocaocap.com/<p>Ꮐood article and riɡht tо the рoint. I don't know іf this is ɑctually tһе best place to ɑsk but do yοu people һave any thoսghts on where to get some professional writers?</p>
<p>Ꭲhanks :)</p>Gridview ASP.NET avec en source une collection d'elements "interface' - Pierre-Emmanuel Dautreppeurn:md5:e1b1bdfe9f1004c22575c9409139023a2009-10-14T21:52:51+02:002009-10-14T20:52:51+02:00Pierre-Emmanuel Dautreppe<p>Et oui SuperDamz ! ICustomTypeDescriptor doit faire le boulot, mais il est "impensable" d'implémenter cette interface sur les types qui peuvent entrer dans la composition d'une liste.</p>
<p>D'ailleurs pour corriger ce que je disais plus haut, le ITypedList fait le boulot, mais uniquement dans un contexte WindowsForms. Cette interface est tout simplement ignorée dans le GridView.</p>
<p>Alors plusieurs autres possibilitées. L'exemple de la classe wrapper proposée ci-dessus est possible. Cependant j'en préfère une autre : ajouter un provider pour les objets de la collection. On peut en effet implémenter un TypeDescriptorProvider pour l'interface qui nous intéresse et faire des TypeDescriptor.AddProvider pour chacune des instances de la collection.</p>
<p>ATTENTION de ne pas faire ça sur les types concernées puisque cela pourrait avoir des conséquences sur le reste de l'application. Cependant sur les instances (si elles ont des durées de vie courtes - ce qui devrait être le cas lors du binding sur une grille), alors c'est tout à fait acceptable.</p>
<p>Qu'en pensez-vous ?</p>Gridview ASP.NET avec en source une collection d'elements "interface' - SuperDamzurn:md5:062cd11366748d263c44995db5f007be2009-10-12T11:27:23+02:002009-10-12T10:27:23+02:00SuperDamz<p>Salut,<br />
Il me semble qu'en implémentant ICustomTypeDescriptor non pas sur la collection, mais sur le type des éléments, le tour sera joué.</p>
<p>Par contre, dans le cas du AutoGeneratesColumns, le Gridview utilise deux techniques différentes pour identifier le type des éléments :<br />
- Si la collection possède une propriété Item[int], il va utiliser le type de cette propriété. C'est le cas des IList<T> mais ça marche aussi avec n'importe quoi d'autre (duck typing).<br />
- Sinon, il va récupérer le premier élément de l'énumérable ; du coup, c'est son type concret qui est utilisé. Et cela, même si on est sur un IEnumerable<T>... Pas terrible en général, et même carrément gênant si la collection contient des dérivés différents de T.</p>Gridview ASP.NET avec en source une collection d'elements "interface' - Thierry Thouaurn:md5:fa39b69da92aeba437274160bfbb76ef2009-10-11T23:39:55+02:002009-10-11T22:39:55+02:00Thierry Thoua<p>Ouip ... Moi j'hésiterais. Je pense que j'envisagerais peut être la solution deux en reprenant l'idée du DataView .. Elle reçoit dans son constructeur une DataTable ... Ca pourrait très bien etre une CollectionView qui hériterait de ITypedList et recevrait dans le ctor la collection "couche basse". le CollectionView<T> utiliserait son "T" pour définir les propriétés visibles.</p>Gridview ASP.NET avec en source une collection d'elements "interface' - Pierre-Emmanuel Dautreppeurn:md5:e68c29266cfd3c0c707b6c8695305abb2009-10-11T23:35:10+02:002009-10-11T22:35:10+02:00Pierre-Emmanuel Dautreppe<p>Effectivement, tu as besoin d'une classe "collection" custom qui fait le travail.<br />
Je préfère cependant la première solution, surtout si tu as cette collection de base dans une couche framework. ça me semble logique qu'elle implémente cette fonctionnalité.</p>Gridview ASP.NET avec en source une collection d'elements "interface' - Thierry Thouaurn:md5:8d8c1e7da36f41812a54adcf164bde242009-10-11T23:24:56+02:002009-10-11T22:24:56+02:00Thierry Thoua<p>Le problème du ITypedList est qu'il necessite souvent la création d'une collection propre héritant de BindingList<T> ou de ObservableCollection<T> pour la représentation à l'UI ... Il n'est pas necessaire d'implémenter cet interface au niveau de l'api business.</p>
<p>Je récupère une facture ... je récupère pas du comportement lié au rendu quand je demande ma collection de facture client + fournisseur.</p>
<p>Dès lors, à mes yeux que ce soit ma solution (qui mélange déjà UI et business) ou ta seconde (qui est la plus propre à mes yeux) .. me semblent "propre". La mienne évite la consommation d'une classe en plus et la tienne (la seconde solution) offre la possibilité d'une séparation entre ce qui est "business" et ce qui est UI.</p>Gridview ASP.NET avec en source une collection d'elements "interface' - Pierre-Emmanuel Dautreppeurn:md5:490cb420fc456694df7c1c0be968b0212009-10-11T22:59:12+02:002009-10-11T21:59:12+02:00Pierre-Emmanuel Dautreppe<p>Oui bien sur ! :-)<br />
C'est une solution, mais pas la bonne ;-)</p>
<p>Il faut savoir que c'est une limitation (connue) du GridView qui se base en effet sur les types concrets pour découvrir les valeurs des propriétés à afficher provenant d'une liste.</p>
<p>La vraie solution est de faire en sorte que la collection d'objets à binder implémente une simple interface nommée ITypedList. Cette interface possède deux seules méthodes. Une est totalement obsolète et était utilisée par le DataGrid. L'autre permet au GridView de connaître les types à afficher.</p>
<p>C'est à mon avis la solution la plus clean.<br />
Pour cela, faire en sorte que l'application utilise une collection de base dans toute votre application et que cette collection fasse le boulot. Bref un vrai jeu d'enfant avec un petit framework dans votre application.</p>
<p>Ah oui, dernier point, cette interface est bien sûr implémentée par défaut dans les collections typées de notre propre framework ;-)</p>
<p>Autre façon de bypasser le mécanisme (plutôt que de modifier l'aspx de tous les gridview) est de créer une simple classe qui implémente ton interface et qui prend un seul paramètre dans ton constructeur : cette même interface. Toutes les méthodes / propriétés de ton interface vont simplement rediriger vers cette variable privée. Bref une encapsulation pour bypasser cette faiblesse.<br />
On en reparle demain au stand up !</p>Merge rapide de colonnes d'une GridView en ASP.NET - SuperDamzurn:md5:7d42a0d6bf1d6b7d9b6080211c822b452009-03-30T13:23:18+02:002009-03-30T12:23:18+02:00SuperDamz<p>Desolé DotClear vire les indentations :</p>
<p>private static void MergeColumn(GridView gv, int position)<br />
{<br />
var qSpawns = gv.Rows.Cast<TableRow>().GroupBy(row => row.Cells[position].Text).GetEnumerator();</p>
<p>for (int i = 0, nextSpan = 0; i < gv.Rows.Count; i++)<br />
if (i == nextSpan && qSpawns.MoveNext())<br />
nextSpan += gv.Rows[i].Cells[position].RowSpan = qSpawns.Current.Count();<br />
else<br />
gv.Rows[i].Cells.RemoveAt(position);<br />
}</p>
<p>Evidement, il faut dès le départ que les colonnes soient sorties de telle manière que l'on puisse les grouper correctement.</p>Wiki ASP.NET - Wikiurn:md5:5f164d319c5ce21bc05929147347f2a42009-03-09T20:24:26+01:002009-03-09T20:24:26+01:00Wiki<p>et bien moi je suis fn de tes articles quoi qu'onbpuisse en dire ! lol</p>Création d'un système de notification en Ajax (microsoft) - Steve Degosserieurn:md5:5de70e82c63dde8fc7f4b1333fdfa4072009-03-03T09:31:14+01:002009-03-03T09:31:14+01:00Steve Degosserie<p>Ze Titi is Back !!! ;o)</p>EventValidation (Vive le Web 2.0) ... - Pierre-Emmanuel Dautreppeurn:md5:4382f2d7f8bfab9c22fcb6f0b3df445f2008-06-17T11:25:28+00:002008-06-17T11:25:28+00:00Pierre-Emmanuel Dautreppe<p>Effectivement Paul, mais il s'agit de la méthode Page.RegisterStartupScript qui est obsolète. Ici en passant pas Page.ClientScript.RegisterStartupScript, il passe effectivement par le ClientScriptManager (qui est exposé via la propriété ClientScript)</p>EventValidation (Vive le Web 2.0) ... - Paul Lorenaurn:md5:5b979b9bae0f9aeea3ab0bb7dcfa438b2008-06-15T22:45:07+00:002008-06-15T22:45:07+00:00Paul Lorena<p>Salut titi!<br />
Excellent article, simplement pour info, l'option "RegisterStartupScript" pour ajouter JavaScript dans la page ASPX a été disponible à partir du Framework 1.1, maintenant est obsolete, on peut utiliser "ClientScriptManager" <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.page.registerstartupscript.aspx" title="http://msdn.microsoft.com/en-us/library/system.web.ui.page.registerstartupscript.aspx" rel="nofollow" rel="ugc nofollow">msdn.microsoft.com/en-us/...</a><br />
<br />
</p>Bouton "GET" en ASP.NET - Thierry Thouaurn:md5:ef1b183c4c179bacdc13adebca1b3b602008-06-05T19:54:09+00:002008-06-05T20:03:51+00:00Thierry Thoua<p>En quelques minutes, voici ce que je ferais pour la notion de "disabled". Apres .. mon else ... il est la pour nettoyer le code de la partie javascript mais je pourrais le laisser. Le comportement ne changerait pas.</p>
<pre>
public class ButtonGetJavascript : WebControl
{
public string DestinationPath
{
get { return (string)ViewState["DestinationPath"]; }
set { ViewState["DestinationPath"] = value; }
}
public string Text
{
get { return (string)ViewState["Text"]; }
set { ViewState["Text"] = value; }
}
protected override HtmlTextWriterTag TagKey
{
get { return HtmlTextWriterTag.Input; }
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Type, "button");
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.ClientID);
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);
writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
if (!this.Enabled)
writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
else
writer.AddAttribute(HtmlTextWriterAttribute.Onclick,
"this.disabled=true;self.location.href='" + this.DestinationPath + "'");
}
}
</pre>Bouton "GET" en ASP.NET - Pierre-Emmanuel Dautreppeurn:md5:8007a8f8874b1dffc39972d62972f0cc2008-06-04T20:15:37+00:002008-06-04T20:15:37+00:00Pierre-Emmanuel Dautreppe<p>Un commentaire encore ! :-p<br />
ça serait intéressant de gérer aussi la notion de "Enabled", il faudra alors modifier le javascript de façon à ne faire le onclick que si le lien est activé. <br />
En fait c'est juste parce que je m'interroge dans ce cas, à savoir si on devrait modifier le onclick ou s'il y a un moyen HTML normal ou non.</p>Bouton "GET" en ASP.NET - Thierry Thouaurn:md5:e913f8069219dc64662c947241bbb5bc2008-06-03T17:41:00+00:002008-06-03T17:41:00+00:00Thierry ThouaAprès commentaires, voici la petite classe updated ;-)
<pre>
public class ButtonGetJavascript : WebControl
{
public string DestinationPath
{
get { return (string)ViewState["DestinationPath"]; }
set { ViewState["DestinationPath"] = value; }
}
public string Text
{
get { return (string)ViewState["Text"]; }
set { ViewState["Text"] = value; }
}
protected override HtmlTextWriterTag TagKey
{
get { return HtmlTextWriterTag.Input; }
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Type, "button");
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.ClientID);
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);
writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
writer.AddAttribute(HtmlTextWriterAttribute.Onclick,
"this.disabled=true;self.location.href='" + this.DestinationPath + "'");
}
}
</pre>Bouton "GET" en ASP.NET - Pierre-Emmanuel Dautreppeurn:md5:65605e15334527ebd07099f9efbdc38d2008-06-02T13:36:05+00:002008-06-02T13:36:05+00:00Pierre-Emmanuel Dautreppe<p>Et au passage, si tu relis le post <a href="http://www.pedautreppe.com/post.aspx?id=a015ec47-1449-4cdb-980e-edc0358f81f2" title="http://www.pedautreppe.com/post.aspx?id=a015ec47-1449-4cdb-980e-edc0358f81f2" rel="nofollow" rel="ugc nofollow">www.pedautreppe.com/post....</a> sur les control adapter, tu verras qu'il peut être assez dangereux d'overrider le "Render" d'un WebControl. (Enfin dangeureux n'est pas le terme, mais disons que ça peut amener des comportements innatendus lors de l'utilisation des WebControls)</p>Bouton "GET" en ASP.NET - Pierre-Emmanuel Dautreppeurn:md5:56b98b89f1c0a6435ad19daaa70750002008-06-02T11:16:03+00:002008-06-02T11:16:03+00:00Pierre-Emmanuel Dautreppe<p>Hello titi ! :-)<br />
<br />
Juste pour relever une (mini) erreur et quelques (mini) propositions d'améliorations : <br />
- Tu "set" le Id et le Name avec le UniqueId alors que tu devrais utiliser le UniqueId et le ClientId.<br />
- Il est possible de simplifier ton Render en déplaçant ton code vers AddAttributesToRender et en virant la génération du tag Input (qui sera spécifié par le constructeur par exemple, ou par le TagKey)</p>