Forum du clan Vioc

Clan [Vioc] - Geriatric Gaming Club since A.D. MMIII - [Vioc] Parkinson nous fait cliquer plus vite, Alzheimer nous fait oublier le résultat.
It is currently 24 Aug 2025 13:26

All times are UTC + 1 hour [ DST ]




Post new topic Reply to topic  [ 14 posts ] 
Author Message
 Post subject: Brutas en ASP.net ?
PostPosted: 11 Sep 2008 11:47 
Offline
Floodeur schizophrene
User avatar

Joined: 21 Oct 2004 23:08
Posts: 1566
J'aurai besoin des conseils avisés d'une bonne Brutas en ASP.net ( de préférence sur du VB hein .. le C# bof quoi ).

quelqu'un matrise les Dategrids , les histoire EventAgrs , qui puissent répondre a mes questions, me donner des exemples de code , me filer son téléphone que jele harcèle ....

si quelqu'un d'entre vous ce reconnait la. n'ayez pas peur , lever le doigt et filer moi votre numéro de telephone ou votre adresse MSN :twisted:

_________________
Pas de bras ! Pas de chocolat !


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 11 Sep 2008 12:27 
Offline
Old Of Warcraft
User avatar

Joined: 09 Oct 2003 10:20
Posts: 5374
Location: Grenoble
dsl pour l'eventuelle fausse joie, jem ;) Mais moi et tout se qui touche a Microsoft, ca fait 2! php/mysql ffs !!!
Nan, en fait je profite de ce thread pour demander si c'est possible d'aggrandir la fenetre de chat du calendrier, pour avoir la meme largeur que la barre de message.
Ca le rendrait plus lisible je pense.
Merki !

_________________
la meilleure signature du fofo, et de loin !


Top
 Profile E-mail  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 11 Sep 2008 16:46 
Offline
Floodeur schizophrene
User avatar

Joined: 10 Mar 2007 15:02
Posts: 4507
Location: au pays des winners
Yop

Moi être grosse brutasse en .net 2.0. Par contre C# obligatoire. Cela dit, ce n'est que de la syntaxe. Les objets .net restent les mêmes.

Tu veux savoir quoi ?

_________________
Everything is clearer now. Life is just a dream you know.
That's never ending, I'm ascending


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 11 Sep 2008 17:41 
Offline
Floodeur schizophrene
User avatar

Joined: 21 Oct 2004 23:08
Posts: 1566
TOUT !

j'ai un mal de chien avec les histoires d'object et eventargs ...

exemple :
Protected Sub Check_Clicked(ByVal sender As Object, ByVal e As EventArgs)
( que tu traduirai en " protected void Check_Clicked(Object sender, EventArgs e) " en C# je pense )

en fonction de où est appeler cette fonction le "EventArgs" contient pas les memes chose , comment savoir quel objet il contients comment parcourir ce bordel en l'affichant sur ma page web , pareil pour l'objet appeler ici "sender".

a chque fois que j'ai affaire a ce genre de truc , je suis obliger de trouver une source sur le net qui fait a peu pret ce que je veux car je ne comprend pas vraiement le pk du comment.

mon gros soucis d'hiers et aujourd'hui a été de trouver un moyen de recupérer des valeurs contenus dans une ligne de data grid , j'ai enfin trouver y'a 15 minutes le moyen de faire ca ... j'ai meme coder 2 façon de le faire, il y a des nuance dans les façon de faire. Ce qui m'embete c'est que je ne comprend pas vraiement tout le code ecrit.

dans l'exmeple ci dessous :
Code:

Protected Sub Check_Clicked(ByVal sender As Object, ByVal e As EventArgs)
      Dim objchkbox As CheckBox = CType(sender, CheckBox)
      Dim dgItem As DataGridItem = CType(objchkbox.NamingContainer, DataGridItem)
      Dim nomdossier as string=dgItem.Cells(0).Text
      dim dossieractif as string
      IF CType(dgItem.FindControl("Actif"), CheckBox).Checked.ToString.ToLower="true" THEN
         dossieractif="1"
      ELSE
         dossieractif="0"
      END IF

                          .... etc ...

   End Sub


le "sender As Object" contient un référence de l'objet qui a appeler la fonction , je crois . Comment parcourir son contenu actuel ? method ? propriété ? attribut ?

le "CType(objchkbox.NamingContainer, DataGridItem)" me retourne la, ligne de mon datagrid, comment j'aurai pu le deviner sans tomber sur un exemple de code précis ? d'ou sort ce "NamingContainer", je n'ai trouve aucune référence sur ce truc avant de tomber sur ce nom. où trouver les bonnes infos ? ( le MSDN je trouve pas ca super bien organisé en faite, mais c'est peut etre une question d'habitude )

plein de truc comme ca qui m'echappe encore a l'heure actuel.

_________________
Pas de bras ! Pas de chocolat !


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 12 Sep 2008 9:36 
Offline
Floodeur schizophrene
User avatar

Joined: 10 Mar 2007 15:02
Posts: 4507
Location: au pays des winners
jem wrote:
TOUT !


Ok. Alors l'idéal déjà, ce serait que du me donne le contexte de ton mini-projet, pour que je vois si ta méthode est la bonne. Par exemple, pour un chargement de données, même si c'est pas le plus simple j'aime bien utiliser un webservice, car arrive toujours un moment ou quelqu'un veut utiliser la même source que toi...et puis c'est tellement plus classe !!!! Mode mytho enclenché. Donc balance moi le sujet de ton mini-projet. Sinon je t'en invente un. L'année dernière j'ai mis en place un mini site web qui parsait l'armurerie de WoW pour ressortir un classement PvP par guilde. Je te filerai le code, il est super bien fait.

jem wrote:
j'ai un mal de chien avec les histoires d'object et eventargs ...

exemple :
Protected Sub Check_Clicked(ByVal sender As Object, ByVal e As EventArgs)
( que tu traduirai en " protected void Check_Clicked(Object sender, EventArgs e) " en C# je pense )


Ah ouais, t'es un galérien toi. Effectivement le EventArgs varie. Mais c'est là tout l'interêt. En fonction de ton Event, tu vas pouvoir agir différemment. Tu vas pouvoir gérer des paramètres du style "e.click" et passer l'objet en même temps. Attention n'oublie pas de caster ton objet avant sinon ça va pas bien marcher. Par contre ce que je ne comprends pas, c'est pourquoi tu veux déjà gérer ça. Genéralement, on s'attaque au passage d'events en paramètre assez tard.

jem wrote:

en fonction de où est appeler cette fonction le "EventArgs" contient pas les memes chose , comment savoir quel objet il contients comment parcourir ce bordel en l'affichant sur ma page web , pareil pour l'objet appeler ici "sender".

a chque fois que j'ai affaire a ce genre de truc , je suis obliger de trouver une source sur le net qui fait a peu pret ce que je veux car je ne comprend pas vraiement le pk du comment.

mon gros soucis d'hiers et aujourd'hui a été de trouver un moyen de recupérer des valeurs contenus dans une ligne de data grid , j'ai enfin trouver y'a 15 minutes le moyen de faire ca ... j'ai meme coder 2 façon de le faire, il y a des nuance dans les façon de faire. Ce qui m'embete c'est que je ne comprend pas vraiement tout le code ecrit.

dans l'exmeple ci dessous :
Code:

Protected Sub Check_Clicked(ByVal sender As Object, ByVal e As EventArgs)
      Dim objchkbox As CheckBox = CType(sender, CheckBox)
      Dim dgItem As DataGridItem = CType(objchkbox.NamingContainer, DataGridItem)
      Dim nomdossier as string=dgItem.Cells(0).Text
      dim dossieractif as string
      IF CType(dgItem.FindControl("Actif"), CheckBox).Checked.ToString.ToLower="true" THEN
         dossieractif="1"
      ELSE
         dossieractif="0"
      END IF

                          .... etc ...

   End Sub


le "sender As Object" contient un référence de l'objet qui a appeler la fonction , je crois . Comment parcourir son contenu actuel ? method ? propriété ? attribut ?

le "CType(objchkbox.NamingContainer, DataGridItem)" me retourne la, ligne de mon datagrid, comment j'aurai pu le deviner sans tomber sur un exemple de code précis ? d'ou sort ce "NamingContainer", je n'ai trouve aucune référence sur ce truc avant de tomber sur ce nom. où trouver les bonnes infos ? ( le MSDN je trouve pas ca super bien organisé en faite, mais c'est peut etre une question d'habitude )

plein de truc comme ca qui m'echappe encore a l'heure actuel.


Allez laisse tomber le VB. ça pue le VB.
Et tant qu'on y est laisse tomber ton datagrid. Je vais te poster dans quelques minutes un mini court. Laisse moi le temps de retrouver ma solution pour les viocs.

_________________
Everything is clearer now. Life is just a dream you know.
That's never ending, I'm ascending


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 12 Sep 2008 9:59 
Offline
Floodeur schizophrene
User avatar

Joined: 10 Mar 2007 15:02
Posts: 4507
Location: au pays des winners
Je vais commencer par le début, le web.config. C'est important. Si tu le souhaites tu peux même en crypter des zones.

Un exemple à moi bien propre et utile:
- Le appSettings. C'est là que tu stockes des paramètres que tu veux changer sans avoir à recompiler.
- le debug toujours à true quand tu développes.
- customErrors : ça te permet de virer les pages d'erreur classique .net et de mettre une page user friendly du style "une erreur est survenue, c'est dommage mais c'est la vie". tu peux garder un mode debug en remote et tu peux faire varier les pages suivant le code de l'erreur.
- authentication : c'est si tu as une authentification à laisser gérer par windows ou IIS.
- le thème: c'est de la feuille de style gérée par .net (en gros). Moi je trouve ça vraiment bien quand tu ne veux pas encombrer ta feuille de style. En fait tu vas gérer par exemple les styles de tous tes labels dans un fichier de skin. C'est très propre et nickel pour les tableaux par exemple dont tu vas faire varier la classe une ligne sur deux. Clairement avec un skin, tu feras dynamique des trucs qui te prendraient deux heures en feuille de style.
- bon ça n'y est pas dans l'exemple d'après mais ça peut etre utile: <connectionStrings/>. C'est l'endroit ou tu vas stocker les données sur tes chaines de connection.

Code:
<?xml version="1.0"?>
<configuration>
   <appSettings file="">
      <clear/>
      <add key="Login" value="i.netuser@bonnasse.com"/>
      <add key="Password" value="Totolamouche"/>
   </appSettings>
   <connectionStrings/>
   <system.web>
      <compilation debug="true">
         <assemblies>
            <add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation>
<pages theme="CalimeroSkin"/>
            <authentication mode="Windows"/>
            <customErrors mode="RemoteOnly" defaultRedirect="CustomError.aspx">
         <error statusCode="403" redirect="NoAccess.htm"/>
         <error statusCode="404" redirect="FileNotFound.htm"/>
      </customErrors>
   </system.web>
</configuration>

_________________
Everything is clearer now. Life is just a dream you know.
That's never ending, I'm ascending


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 12 Sep 2008 10:07 
Offline
Old Of Warcraft
User avatar

Joined: 09 Oct 2003 10:20
Posts: 5374
Location: Grenoble
Si ca c'est pas le coin des geeks :)

_________________
la meilleure signature du fofo, et de loin !


Top
 Profile E-mail  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 12 Sep 2008 10:27 
Offline
Floodeur schizophrene
User avatar

Joined: 10 Mar 2007 15:02
Posts: 4507
Location: au pays des winners
Code:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Character" targetNamespace="http://tempuri.org/Character.xsd" xmlns:mstns="http://tempuri.org/Character.xsd" xmlns="http://tempuri.org/Character.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
  <xs:annotation>
    <xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">
      <DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
        <Connections>
        </Connections>
        <Tables>
        </Tables>
        <Sources>
        </Sources>
      </DataSource>
    </xs:appinfo>
  </xs:annotation>
  <xs:element name="Character" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="Character" msprop:Generator_DataSetName="Character">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="CharacterPvp" msprop:Generator_UserTableName="CharacterPvp" msprop:Generator_RowDeletedName="CharacterPvpRowDeleted" msprop:Generator_RowChangedName="CharacterPvpRowChanged" msprop:Generator_RowClassName="CharacterPvpRow" msprop:Generator_RowChangingName="CharacterPvpRowChanging" msprop:Generator_RowEvArgName="CharacterPvpRowChangeEvent" msprop:Generator_RowEvHandlerName="CharacterPvpRowChangeEventHandler" msprop:Generator_TableClassName="CharacterPvpDataTable" msprop:Generator_TableVarName="tableCharacterPvp" msprop:Generator_RowDeletingName="CharacterPvpRowDeleting" msprop:Generator_TablePropName="CharacterPvp">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" msprop:Generator_UserColumnName="Name" msprop:Generator_ColumnPropNameInRow="Name" msprop:Generator_ColumnVarNameInTable="columnName" msprop:Generator_ColumnPropNameInTable="NameColumn" type="xs:string" />
              <xs:element name="Freekills" msprop:Generator_UserColumnName="Freekills" msprop:Generator_ColumnPropNameInRow="Freekills" msprop:Generator_ColumnVarNameInTable="columnFreekills" msprop:Generator_ColumnPropNameInTable="FreekillsColumn" type="xs:int" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="TeamArena" msprop:Generator_UserTableName="TeamArena" msprop:Generator_RowDeletedName="TeamArenaRowDeleted" msprop:Generator_RowChangedName="TeamArenaRowChanged" msprop:Generator_RowClassName="TeamArenaRow" msprop:Generator_RowChangingName="TeamArenaRowChanging" msprop:Generator_RowEvArgName="TeamArenaRowChangeEvent" msprop:Generator_RowEvHandlerName="TeamArenaRowChangeEventHandler" msprop:Generator_TableClassName="TeamArenaDataTable" msprop:Generator_TableVarName="tableTeamArena" msprop:Generator_RowDeletingName="TeamArenaRowDeleting" msprop:Generator_TablePropName="TeamArena">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="TeamName" msprop:Generator_UserColumnName="TeamName" msprop:Generator_ColumnPropNameInRow="TeamName" msprop:Generator_ColumnVarNameInTable="columnTeamName" msprop:Generator_ColumnPropNameInTable="TeamNameColumn" type="xs:string" />
              <xs:element name="Size" msprop:Generator_UserColumnName="Size" msprop:Generator_ColumnPropNameInRow="Size" msprop:Generator_ColumnVarNameInTable="columnSize" msprop:Generator_ColumnPropNameInTable="SizeColumn" type="xs:string" minOccurs="0" />
              <xs:element name="ranking" msprop:Generator_UserColumnName="ranking" msprop:Generator_ColumnPropNameInRow="ranking" msprop:Generator_ColumnVarNameInTable="columnranking" msprop:Generator_ColumnPropNameInTable="rankingColumn" type="xs:string" minOccurs="0" />
              <xs:element name="rating" msprop:Generator_UserColumnName="rating" msprop:Generator_ColumnPropNameInRow="rating" msprop:Generator_ColumnVarNameInTable="columnrating" msprop:Generator_ColumnPropNameInTable="ratingColumn" type="xs:string" minOccurs="0" />
              <xs:element name="Members" msprop:Generator_UserColumnName="Members" msprop:Generator_ColumnPropNameInRow="Members" msprop:Generator_ColumnVarNameInTable="columnMembers" msprop:Generator_ColumnPropNameInTable="MembersColumn" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//mstns:CharacterPvp" />
      <xs:field xpath="mstns:Name" />
    </xs:unique>
    <xs:unique name="TeamArena_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//mstns:TeamArena" />
      <xs:field xpath="mstns:TeamName" />
    </xs:unique>
  </xs:element>
</xs:schema>


Voilà le code d'un dataset. Créé toi un dataset vide sous VS et ouvre le en XML. Colle mon code et repasse dans la vue du designer. Parce que là, si tu connais pas, c'est imbitable.

Le dataset c'est en gros un reflet de tes données que tu vas garder en mémoire dans ton projet. Dans un Dataset, tu as des datatables, et dans une datatable tu as des datarows. Simple non ? Tu peux avoir des relations entre tes tables (mais au début oublie ça). L'idéal avec le dataset, c'est que tu peux en charger le contenu directement depuis une base de données. Par exemple, tu vas écrire une procédure stockée qui va remplir directement ton dataset. Ensuite tu manipules les lignes ou les tables en .net. Mais tu peux également remplir ton dataset par un fichier CSV, un fichier XML, etc...

Prends mon exemple: J'ai deux tables "CharacterPvP" et "TeamArena".
Dans CharacterPvP j'ai deux lignes: Name (le nom du joueur) et Freekills (les victoires honorables).

Dans TeamArena j'ai
TeamName: le nom de ta team
size: 2vs2 3vs3, etc..
rating: la cote
ranking: le classement
membrers: les noms des joueurs.

donc je vais faire quoi avec ça ? tout d'abord je vais charger mon dataset. Pour ça je vais me connecter à l'armurerie du site de wow. Comment ? Et bien vu que leur site est codé comme un porc, j'ouvre en fait une connection http sur une de leur page et je la lis physiquement (oui je sais, c'est pas propre mais leur site non plus). Je stocke le résultat de la chaine dans un document XML et je suis content.
Donc ci-dessous je vais me créer une méthode pour ça. Un truc qui va me servir à ouvrir une page http et à stocker le contenu dans du xml.

Code:
private static XmlDocument OpenPage(string url)
        {   
            WebClient client = new WebClient();
            client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");         
            Stream strm = client.OpenRead(url);
            StreamReader sr = new StreamReader(strm);           
            string s = sr.ReadToEnd();

            XmlDocument mydocXML = new XmlDocument();
            mydocXML.LoadXml(s);                       
            strm.Close();

            return mydocXML;
        }


Simple non ?
Maintenant je charge le dataset.
Alors vu que j'ai un beau fichier XML, je peux récupérer un peu ce que je veux. On va commencer avec le parsing d'une guilde.

Déjà je construit l'url à ouvrir en fonction de paramètres saisis dans un formulaire (on vera le formulaire après).

Ensuite je déclare un dataset du type de celui dont j'ai besoin. Après, vu que je suis un cador en xml, j'écris une requete xpath pour localiser la donnée dont j'ai besoin. Je me fais une petite boucle et je vais donc stocker dans mon dataset chaque nom de chaque joueur d'une guilde prédéfinie avec son nombre de VH.
ex: pour la guilde VIOC
Maia 25 000 VH
Wilco 2 VH
Mildiou 0 VH
Lancélion 250 000 VH


Code:
public static DataView ParseGuild(string guildName)
        {
            string url = Constant.urlGuild + "?r=" + Constant.Kingdom + "&n=" + guildName + "&p=1";
            XmlDocument myGuild = new XmlDocument();
            myGuild = OpenPage(url);

            Character.CharacterPvpDataTable ds = new Character.CharacterPvpDataTable();           
            XmlNode root = myGuild.DocumentElement;

            string xpathRequest = "/page/guildInfo/guild/members/character/@name";

            XmlNodeList nodes = root.SelectNodes(xpathRequest);

            foreach (XmlNode x in nodes)
            {               
                string urlMyName = Constant.urlCharacter + "?r=" + Constant.Kingdom + "&n=" +x.InnerXml.ToString() ;               
                int nbFreeKills = nbOfKills(urlMyName);
                ds.AddCharacterPvpRow(x.InnerXml.ToString(),nbFreeKills);                     
            }

            ds.AcceptChanges();
                       
            DataView dw = new DataView(ds);                                 
            dw.Sort = "Freekills DESC";
           
            return dw;
     
        }


Et voilà, j'ai donc chargé mes données et je suis près à les traiter dans un formulaire sans me fatiguer...Et surtout sans réécrire de code pour les gérer (sauf si tu veux faire des trucs biscornus).

_________________
Everything is clearer now. Life is just a dream you know.
That's never ending, I'm ascending


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 12 Sep 2008 14:23 
Offline
Floodeur schizophrene
User avatar

Joined: 10 Mar 2007 15:02
Posts: 4507
Location: au pays des winners
déjà ça ? ça t'aide ou pas ? avant de passer aux formulaires et aux events. Des questions ?

_________________
Everything is clearer now. Life is just a dream you know.
That's never ending, I'm ascending


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 12 Sep 2008 15:40 
Offline
Qui floode sans s'essouffler
User avatar

Joined: 06 Feb 2005 18:20
Posts: 8881
Location: floodland resort (D)(T)(C) -> (*)
Maia wrote:
Le dataset c'est en gros un reflet de tes données que tu vas garder en mémoire dans ton projet. Dans un Dataset, tu as des datatables, et dans une datatable tu as des datarows


maintenant tu remplace "Data" par "Gangre", et tu te dit que les auteurs de WoW doivent dominer le code ASP.net :)

_________________
Ceci est une signature qui roskxx sa maman.


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 15 Sep 2008 11:56 
Offline
Floodeur schizophrene
User avatar

Joined: 21 Oct 2004 23:08
Posts: 1566
En faite stephane j'aurai pas du te répondre TOUT , car le web.config ca va , c'est la partie que je maitrise la mieux.
et ton exemple de dataList j'ai pas compris pk tu me parlais de ca.

Pour que tu situ mieux ce que je demande on va prendre un exemple concret de mon probleme de la maintenant tout de suite.
Aujourd'hui je viens de comprendre la pseudo différence entre : un dataGrid , Un Gridview , un DataList , un repeater.
Ce que j'en ai compris , c'est que finalement tout ces trucs servent un peu a la meme chose , avec des différences plus ou moins importante, mais surtout peuvent être des objets dépassé e nfocntion de la version ASP.net.
Le datagrid etait par exemple un truc de ASP.net version 1.1 .. on prefererai utiliser maintenant le GridView fournit avec la version 2.0. le dataList etant un peu la meme chose mais en se serveur d'un fichier modele pour mettre en forme les données a l'affichage ( tu me corrige si je me trompe ? )

Le data list c'est trop compliqué pour mes besoins , qui plus est , je developpe pas du tout avec un outils genre Visual studio, et j'ai pas du tout envie de m'y mettre pour le moment. Alors ca sera bloc note pour tout le monde ( bon ok , j'utilise quand meme dreamweaver en faite )

mon probleme actuel donc c'est :

j'ai un repeater, dans lequel je vais avoir un autre repeater.
Code:
<asp:Repeater id="rp_ListeMenu" runat="server" OnItemCreated="ChargerListePage"> '<======= REPEATER 1
<HeaderTemplate>....code html  ... osef</HeaderTemplate>
<ItemTemplate>
   <asp:Label id="la_NomDossier" runat="server" text='<%#Container.DataItem("NomDossier")%>' /></td>
    <asp:Repeater id="rp_listefichier" runat="server">  '<======= REPEATER 2
         <headertemplate>......</headertemplate>
            <itemtemplate>
               <%#Container.DataItem("Actif")%>
               <%#Container.DataItem("NomFichier")%
            </itemtemplate>
            <footertemplate>......</footertemplate>
          </asp:Repeater>
  </ItemTemplate>
  <FooterTemplate>........</FooterTemplate>
</asp:Repeater>



voila la base du code dans la page d'affichage. le repeater ce charge tres bine .. ca fait ce que je veux.
L'attribut OnItemCreated="ChargerListePage" va donc appeler a chaque chargement d'item du repeater 1 la fonction "ChargerListePage" qui est donc dans mon code behind, dans lequel je vais lui dire de charger le repeater 2.
mais pour charger le repeater2 je vais d'abord charger donné qui sont fonction de la ligne, donc je doit récupérer "quelques chose " ( ici le nom du dossier ) qui va me permetre de charger le bon truc. c'est la que ca coince pour moi ... je n'arriva pas a comprendre ce qu'on va trouver dans le "e" de RepeaterIemEventArgs.
Je sais qu'il y a une collection Item, mais derriere ? comment je retrouve par exemple le contenue du label "la_NomDossier" qui est sur la meme ligne ? a chaque fois que j'ai eu affaire a ce genre de truc , c'est toujours un bout de code bien particulier qui allait chercher la donnée .. c'est ca qui me manque ... c'est le bordel total, je trouve aucune info qui me fait comprendre ce que j'ai la dedans , et comment les utilisers.

Alors la je me contente d'ecrire dans un label pour debuguer par exemple , les 2 premier ligne etant plus ou moins ce que je veux faire , mais mal coder ( erreur de syntaxe )
Code:
PROTECTED SUB ChargerListePage(sender as object, e as RepeaterItemEventArgs)
      'CTYPE(e.Item.FindControl("rp_listefichier"), Repeater).DataSource=ListePage(CTYPE(e.Item.FindControl("la_NomDossier"), Label).text)
      'CTYPE(e.Item.FindControl("rp_listefichier"), Repeater).DataBind()
      Infodebug.Text &=e.Item.FindControl("le_NomDossier").ToString & "<br>"
   END SUB


le find controle me ramene une jolie erreur :
System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.

alors que dans l'exemple que j'ai chopper en C# c'est pas beacoup plus compliquer :
Code:
protected void ProcessusCreated(object sender, RepeaterItemEventArgs e)
{
(e.Item.FindControl("rptDocuments") as Repeater).DataSource = new Databases().OracleGetDataTableOfTable("PROCESSUS", (e.Item.DataItem as DataRowView)["PROCESSUS_ID"].ToString(), "NOM");
(e.Item.FindControl("rptDocuments") as Repeater).DataBind();
}



alors donc voila , ma methode n'est pas mauvaise , c'est justqe que je comprend pas l'ogranisation des données dans un EventArgs , qu'on y a souvent affaire; et que je trouve pas de site qui en parle une bonne fois pour toute .. et le MDSN de Microsoft est aussi assez flou la dessus. on a l'impréssion que c'est censé etre une truc facile et evident .....

moi besoin info la dessus :D.

meme si le reste te semble pas la bonne façon de faire ... on va garder cette façon .. on verra plus tard si vaux mieux utilisé un DataList ... ca change pas le probleme actuel :D

_________________
Pas de bras ! Pas de chocolat !


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 15 Sep 2008 14:16 
Offline
Floodeur schizophrene
User avatar

Joined: 10 Mar 2007 15:02
Posts: 4507
Location: au pays des winners
Comme convenu au téléphone
Le fichier ascx du treeview (le user controle)
Tu ne trouveras pas mieux en matière de treeview.
Je dois partir en réunion, si il manque quelque chose, laisse moi un mot ici ou par MP.

Code:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="NavLeft.ascx.cs" Inherits="UserControls_TestNav" %>
<asp:TreeView ID="trvNavigation" runat="server" PopulateNodesFromClient="true"   OnTreeNodePopulate="trvNavigation_TreeNodePopulate">       
        <Nodes>
          <asp:TreeNode Text="Europe" NavigateUrl="~/index.aspx" Value="Europe" SelectAction="Expand" PopulateOnDemand="true"/>                 
        </Nodes>               
</asp:TreeView>


Le C# (le code behind)
Code:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class UserControls_TestNav : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {       
        Session["dsTreeview"] = DisplayPlant.GetAllCountry();
    }

   
   
    protected void trvNavigation_TreeNodePopulate(object sender, TreeNodeEventArgs e)
    {               
        //User can select countries or business units in the treeview
        switch (e.Node.Depth)
        {
            case 0:
                PopulateCountries(e.Node);               
                break;
            case 1:               
                PopulateBusinessUnits(sender, e.Node);
                break;
            default:               
                break;
        }

    }

    void PopulateCountries(TreeNode node)
    {
        // load the treeview with countries data
        BUData.CountryListModelDataTable dsCountry = new BUData.CountryListModelDataTable();
        dsCountry = (BUData.CountryListModelDataTable)Session["dsTreeview"];
               
        if (dsCountry.Count > 0)
        {

         
            foreach (DataRow row in dsCountry.Rows)
            {               
                TreeNode newNode = new TreeNode();
               
                newNode.Text = row["cou_name"].ToString();
                newNode.Value = row["cou_id"].ToString();                               
                newNode.PopulateOnDemand = true;
               
                // keep expended the selected country
                if (Request.QueryString["CountryID"] == row["cou_id"].ToString())
                    newNode.Expanded = true;
                else
                    newNode.Expanded = false;
                   
                newNode.SelectAction = TreeNodeSelectAction.Expand;       
               
                node.ChildNodes.Add(newNode);
            }

        }

    }

    void PopulateBusinessUnits(object sender, TreeNode node)
    {
        // load the treeview with business units data
        BUData.BuByCountryModelDataTable dsCountry = new BUData.BuByCountryModelDataTable();
        int cou_id;
        if (int.TryParse(node.Value, out cou_id))
        {
        dsCountry = DisplayPlant.GetBUList(cou_id);
        }
             
        if (dsCountry.Count > 0)
        {       
            foreach (DataRow row in dsCountry.Rows)
            {       
                TreeNode NewNode = new TreeNode(row["bzu_name"].ToString());
                NewNode.NavigateUrl = Constant.PlantURL.ToString() + row["bzu_id"].ToString() + Constant.CountryID.ToString() + cou_id;

                //color in red the selected node
                if (Request.QueryString["BuID"] == row["bzu_id"].ToString())
                {
                    NewNode.Selected = true;               
                }
                else
                    NewNode.ToolTip = "";

                NewNode.PopulateOnDemand = false;
                NewNode.SelectAction = TreeNodeSelectAction.Select;                               
                node.ChildNodes.Add(NewNode);
            }           
        }
    }
   
}

_________________
Everything is clearer now. Life is just a dream you know.
That's never ending, I'm ascending


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 15 Sep 2008 14:30 
Offline
Floodeur schizophrene
User avatar

Joined: 21 Oct 2004 23:08
Posts: 1566
merci steph :)

_________________
Pas de bras ! Pas de chocolat !


Top
 Profile  
 
 Post subject: Re: Brutas en ASP.net ?
PostPosted: 17 Sep 2008 17:36 
Offline
Ténardier
User avatar

Joined: 07 Oct 2003 18:52
Posts: 9975
Location: Dans les entrailles du Forum
Moi j'ai tout lu, tout ce que j'ai retenu c'est : "bonnasse.com" :lol:

_________________
Image
[Vioc] Parkinson me fait cliquer plus vite, Alzheimer me fait oublier le résultat.


Top
 Profile E-mail  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 14 posts ] 

All times are UTC + 1 hour [ DST ]


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group