Le TreeView de .NET... Tellement simple !

Bonjour,

 bonne année aux rares lecteurs de ce blog :-)

J'ai commencé l'année en décidant d'enfin utiliser le TreeView proposé en ASP.NET 2.0... Et je n'ai pas été déçu tellement il est simple à utiliser.

Pour la toute première utilisation, il suffira de faire un fichier web.sitemap qui devra décrire notre arborescence de menu. Exemple :

<?xml version="1.0" encoding="utf-8" ?>
<
siteMap>
<
siteMapNode title="Menu">
<
siteMapNode title="Accueil" url="~/index.aspx" >
</
siteMapNode>
<
siteMapNode title="Categorie1">
  <
siteMapNode title="Page1 de la Categorie1" url="~/categorie1/page1.aspx"></siteMapNode>
  <siteMapNode title="Page2 de la Categorie1" url="~/categorie1/page2.aspx"></siteMapNode>
</siteMapNode>
<siteMapNode title="Categorie2">
  <siteMapNode title="Page1 de la Categorie2" url="~/categorie2/page1.aspx"></siteMapNode>
  <siteMapNode title="Page2 de la Categorie2" url="~/categorie2/page2.aspx"></siteMapNode>
</siteMapNode>
</siteMapNode>
</
siteMap>

On vient grosso mode de décrire :

MENU
  |
  |--Categorie1
  |         |--Page1 de la Categorie1
  |         |--Page2 de la Categorie1
  |--Categorie2
            |--Page1 de la Categorie2
            |--Page2 de la Categorie2

D'après le descriptif XML, Menu n'est pas un lien , ni Categorie1, ni Categorie2. Mais cela pourrait être le cas ! il suffirait d'ajouter le paramètre URL comme nous l'avons fait pour Page1 et Page2 dans chaque catégorie.

Le fichier XML prêt... Il suffit maintenant dans notre page ASPX où l'on veut afficher le menu d'écrire ceci :

<asp:TreeView DataSourceID="SiteMapDataSource1" ID="TreeView1" ImageSet="Simple2" Runat="server" OnDataBound="TreeView1_DataBound" ExpandDepth="0"/>
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"/>

Evidemment, on peut se caler sur autre chose que le SiteMap du site ! On peut fournir n'importe quelle source. Mais comme on le voit à l'exécution... Rien de plus simple que de faire des menus attractifs...

Donc pensons plus souvent au TreeView :-D

This is title

Post goes here

Bloqueur de PopUp...

Il est fréquent que nos sites aient besoin d'ouvrir une popup...

Or il est très fréquent que les utilisateurs aient installé un bloqueur de popup.

La seule solution est donc de déterminer cette situation. Voici une méthode Javascript toute simple :

try {
w=window.open("index2.html",'popup');
}
catch(err) {
//avertissement sur la page en live !
document.write("Bloqueur de popup");
//ou renvoi vers une page d'avertissement
location.href="avertissement.html"; //Renvoi vers une page indiquant que le site a besoin d'être autorisé à ouvrir des popups ; ou alors renvoi vers la page de pub en pleine page sur le site du coup !
}

AJAX pour ASP.NET 1.1

Comme cela peut toujours servir :

http://ajax.schwarz-interactive.de/CSharpSample/

C'est gratuit ; c'est pratique :) 

 

Javascript : Vérifier la présence des Frames et les imposer !

Pour les personnes qui travaillent encore avec des Frames (beurk), il peut être intéressant d'avoir une astuce simple pour s'assurer que certaines pages ne sont pas chargées en dehors des frames...

Voici du Javascript qui peut aider :

1) dans les pages qui sont chargées par les frames et qui sont donc susceptibles d'être référencées par GOOGLE et donc chargées en dehors des frames, ajouter ceci :

[...] 
<head>
[...]
<script language="JavaScript">
if (parent.frames.length < 1)
{
chaine="http://www.monsiteweb.com/accueil.htm?from="+document.location.href
document.location.href = chaine;
}
</script>
</head>

Evidemment, dans l'exemple ci-dessus il faut remplacer monsiteweb.com   par votre site   et accueil.htm correspond à la page contenant le FRAMESET

 

2) Dans la page définissant les Frames (contenant le Frameset), il faut ajouter  (dans notre exemple dans accueil.htm donc) :

<html>
<head>
[...]
<script>
function goodurl()
{
  chaine=document.location.href
  if (chaine.indexOf("from=")>-1)
  {
    parent.principal.location.href=chaine.substring(chaine.indexOf("from=")+5,chaine.length)
  }
  else
  {
    parent.principal.location.href=http://www.monsiteweb.com/cadre_principal.htm
  }
}
</script>
</head>

<frameset rows="107,*,20" framespacing="0" border="0" frameborder="0" onLoad="goodurl();">
  <frame name="haut" scrolling="no" noresize marginheight="0" src="cadre_haut.htm" target="principal" marginwidth="0" style="border-left-width: 1; border-right-width: 1; ">
  <frame name="principal" scrolling="auto" noresize src="cadre_principal.htm" target="_self" style="padding: 0">
  <frame name="bas" scrolling="no" noresize src="cadre_bas.htm" target="principal" marginheight="0" marginwidth="0" style="border-left-width: 1; border-right-width: 1; border-bottom-width: 1">
  <noframes>
    <body style="border:0px solid #FFCC00; " text="#000000" bgcolor="#0000FF">
      <p>Bienvenue sur MON SITE WEB. Malheureusement votre navigateur Internet n'accepte pas les frames...</p>
    </body>
  </noframes>
</frameset>

 
 

Javascript : Raffraîchir un parent lointain !!

Il peut parfois être intéressant de pouvoir raffraichir une fenêtre parente (window.opener).

Mais il peut arriver que la fenêtre qui cherche à raffraîchir le parent soit la fille d'une fenêtre intermédiaire.

La fonction javascript suivante recherche la fenêtre principale qui a ouverte la fille en cours :

function parentRefresh()
{
  /* Cette fonction va permettre de remonter jusqu'à la fenêtre principal qui a ouverte la fenêtre en cours
 Ceci est pratique si entre la fenêtre en cours a été ouverte par une fille intermédiaire de la fenêtre principale*/
 principalWindow=window.opener; 
  while(principalWindow.opener!=null)
 {
 
   principalWindow=principalWindow.opener;
 }
 
 principalWindow.location.href=principalWindow.location.href;

}

DataFormatString et GridView

Comme le problème est un peu partout présent sur le Web ... Je tiens à rappeler ici que pour qu'un DataFormatString fonctionne dans une colonne BoundField d'une GridView, il est indispensable que le paramètre HtmlEncode (de BounField) soit intialisé à False... Sinon le DataFormatString sera ignoré !

Exemple :

<asp:GridView ID="GridViewTest" runat="server" AutoGenerateColumns="False" >
<Columns>
[...]
<asp:BoundField HeaderText="Prix" DataFormatString="{0:f2}" HtmlEncode=false DataField="databaseField" />
[...]

</Columns>
</asp:GridView>

Equivalent d'un DISTINCT sur une DataTable

Comme cela fait plusieurs fois que j'ai eu à me servir de cette méthode, peut-être pourrait-elle servir...

Il arrive que l'on récupère une DataTable avec des doublons... Il est très simple de faire l'équivalent d'un DISTINCT grâce à la méthode ToTable de DataView !

Imaginons le DataSet ds qui contient une DataTable.
Cette DataTable contient entre autres une colonne ID que l'on voudrait unique.
La DataTable contient néanmoins des doublons.

Pour avoir l'équivalent d'un distinct sur la colonne ID :

 DataView dv=ds.Tables[0].DefaultView;
string[] colonnes={"ID","nom","pnom"};   //Liste des colonnes que l'on veut avoir en retour. Incluant le nom de la colonne jouant le rôle d'identifiant.
DropDownListMaListe.DataSource=dv.ToTable(true,colonnes);
DropDownListMaListe.DataValueField="ID";
DropDownListMaListe.DataTextField="nom";
DropDownListMaListe.DataBind();

ToTable(true,colonnes);  aura pour effet de filtrer la DataView en ne ressortant que les combinaisons de colonnes (ID,nom,pnom) distinctent. C'est le premier paramètre(true|false) de ToTable  qui permet d'indiquer que l'on veut ce filtrage...

 

Pratique, rapide à mettre en oeuvre.

Outil de Préparation aux Certifications Microsoft

 

Microsoft propose de tester un nouvel outil de préparation aux certifications en allant sur http://www.myexamcoach.com

Pour environ 60 Euros vous disposez de questionnaires de préparation à une certification de votre choix mais surtout, vous avez la possibilité de faire appel par CHAT et même par téléphone à des experts certifiés ! Ces derniers vous répondent en temps réels et vous aident à étudier les sujets sur lesquels vous les questionnerez !

 

Déploiement de BlogEngine.NET

Bonjour à tous !

Visiteur égaré ou curieux, soyez le bienvenu. 

Ce message est le premier pour l'ouverture de mon blog, mis en place grâce au formidable moteur BlogEngine.NET....

Très simple à installer... En quelques minutes un outil complet et opérationnel...

A propos de l'auteur

 

Développeur depuis plus de 10 ans, j'ai commencé la programmation dès l'âge de 9 ans sur un PC 8088 !!

GW-Basic, Pascal, Turbo Pascal, Delphi ont fait mes bases... Puis Java , bien plus tard... Pour enfin avoir découvert le C#... Quel plaisir de développer avec ce langage des solutions ASP.NET... Le développement Web comme jamais je ne pouvais l'imaginer possible :)

Aujourd'hui titulaire du MCSD VS 6.0, MCAD .NET, et MCT ...

Sur ce blog, je souhaite partager des choses simples mais efficaces... Des problèmes de tous les jours que l'on peut rencontrer et qu'il est simple de régler :)

Mes certifications

Month List