Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
885 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#/ASP.NET] Problem de refresh

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#/ASP.NET] Problem de refresh

n°949853
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-01-2005 à 11:20:16  profilanswer
 

Ca doit être un problème hyper récurrent, je me souviens l'avoir déjà eu.
 
J'ai un objet "TreeView" dans une page. Lorsque je clique sur une node, je voudrais connaître dans la page quel est l'ID de la node sélectionnée.
 
Rien à faire, systématiquement j'ai la node sélectionnée au coup d'avant :/
 
Ma class TreeBloc :

Code :
  1. using System;
  2. using System.Data;
  3. using System.Web;
  4. using System.Web.UI;
  5. using System.Web.UI.WebControls;
  6. using System.Web.UI.HtmlControls;
  7. using System.ComponentModel;
  8. using Microsoft.Web.UI.WebControls;
  9. using NetCms.Web.Bo.Controls;
  10. using NetCms.Web.Bo.Components;
  11. using Cms.Components.Facade;
  12. using Cms.Components.Common;
  13. namespace NetCms.Web.Bo.Controls
  14. {
  15. /// <summary>
  16. /// Description résumée de TreeBloc.
  17. /// </summary>
  18. public class TreeBloc : Bloc
  19. {
  20.  private TreeView _treeView;
  21.  /// <summary>  
  22.  /// TreeBloc : Constructeur
  23.  /// </summary>
  24.  public TreeBloc()
  25.  {
  26.   _treeView = new TreeView();
  27.   _treeView.ID = "treeview";
  28.   _treeView.Expand += new ClickEventHandler(NodeExpand);
  29.   _treeView.Collapse += new ClickEventHandler(NodeCollapse);
  30.   _treeView.SelectedIndexChange += new SelectEventHandler(OnSelectNode);
  31.   _treeView.Attributes.Add("onclick", "document.all.menuIsVisible.value='1'; document.getElementById('menuX').value = event.x; document.getElementById('menuY').value = event.y + document.body.scrollTop; document.getElementById('scroll').value = document.body.scrollTop; document.all.ctxMenuArbo.style.left = event.x; document.all.ctxMenuArbo.style.top = event.y + document.body.scrollTop; document.all.ctxMenuArbo.style.visibility='visible';" );
  32.   _treeView.SelectExpands = false;
  33.   _treeView.ShowPlus = true;
  34.   _treeView.ShowLines = false;
  35.   _treeView.AutoPostBack = true;
  36.   _treeView.CssClass = "texte-intitule";
  37.   _treeView.HoverStyle.CssText =  "font-family : arial; color:#000000; background : #C4B4E7; font-size : 8pt;  text-decoration : none;";
  38.   _treeView.ExpandedImageUrl=PageBase.ApplicationVirtualRoot + "/Medias/img/bt_dossier_ouvert.gif";
  39.   _treeView.ImageUrl=PageBase.ApplicationVirtualRoot + "/Medias/img/bt_dossier_ferme.gif";
  40.   _treeView.DefaultStyle.CssText = "font-family : arial; color:#000000; background : #ffffff; font-size : 8pt;  text-decoration : none;";
  41.   _treeView.SelectedStyle.CssText = "font-family : arial; font-weight:bold; color:#FFFFFF; background : #C4B4E7;";
  42.   _treeView.EnableViewState = true;
  43.  }
  44.  public void Initialize(ListItem rootItem)
  45.  {
  46.   TreeNode rootNode = new TreeNode();
  47.   rootNode.Text = rootItem.Text;
  48.   rootNode.NodeData = rootItem.Value;
  49.   _treeView.Nodes.Add(rootNode);
  50.   rootNode.Expanded = true;
  51.  }
  52.  public TreeNode getNode(String nodeIndex)
  53.  {
  54.             return _treeView.GetNodeFromIndex(nodeIndex);
  55.  }
  56.  public String getSelectedNodeIndex()
  57.  {
  58.   this.EnsureChildControls();
  59.   return _treeView.SelectedNodeIndex;
  60.  }
  61.  private void NodeExpand(Object sender, TreeViewClickEventArgs e)
  62.  {
  63. //   TreeNode expandedNode = _treeView.GetNodeFromIndex(e.Node);
  64.  }
  65.  public void NodeExpand(string index)
  66.  {
  67.   TreeNode expandedNode = _treeView.GetNodeFromIndex(index);
  68.   _treeView.GetNodeFromIndex(index).Expanded = true;
  69.  }
  70.  private void NodeCollapse(Object sender, TreeViewClickEventArgs e)
  71.  {
  72.  }
  73.  public void LoadData(DataTable data)
  74.  {
  75.   _treeView.Nodes.Clear();
  76.   foreach (DataRow row in data.Rows)
  77.   {
  78.    TreeNode node = new TreeNode();
  79.    node.Text = row[2].ToString();
  80.    node.ID = row[0].ToString() + "." + row[1].ToString();
  81.    addChildren(node);
  82.    _treeView.Nodes.Add(node);
  83.   }
  84.  }
  85.  private void addChildren(TreeNode node)
  86.  {
  87.   DataTable data = (new facSubTree(node.ID)).getSubTreeData();
  88.   foreach (DataRow row in data.Rows)
  89.   {
  90.    TreeNode childNode = new TreeNode();
  91.    childNode.Text = row[2].ToString();
  92.    childNode.ID = row[0].ToString() + "." + row[1].ToString();
  93.    node.Nodes.Add(childNode);
  94.    addChildren(childNode);
  95.   }
  96.  }
  97.  public void SetChildNodes(TreeNode parentNode)
  98.  {
  99. //   parentNode.Nodes.Clear();
  100.  }
  101.  public void SetExpanded(TreeNode expandedNode)
  102.  {
  103.  }
  104.  public void Refresh()
  105.  {
  106.   ((TextBox) Page.FindControl("objId" )).Text = this.getNode(this.getSelectedNodeIndex()).ID;
  107.   this.DataBind();
  108.  }
  109.  /// <summary>  
  110.  /// CreateChildControls : créé les contrôles enfants selon la propriété 'type'
  111.  /// </summary>
  112.  protected override void CreateChildControls()
  113.  {
  114.   this.Controls.Add(_treeView);
  115.  }
  116.  public void OnSelectNode(Object sender, TreeViewSelectEventArgs e)
  117.  {
  118. //   TreeNode selectedNode = _treeView.GetNodeFromIndex(e.NewNode);
  119.   Refresh();
  120.  }
  121. }
  122. }


 
Ma tentative d'appel :

Code :
  1. TreeBloc tree = new TreeBloc();
  2.   facTree treeEntries = new facTree(COD_RUB);
  3.   tree.LoadData(treeEntries.getTreeData());
  4.   tree.Title = "Liste des éléments";
  5.   tree.Visible = true;
  6.   divTree.Controls.Add(tree);
  7.   tree.Refresh();
  8.   Literal test = new Literal();
  9. //   test.Text = tree.getNode(tree.getSelectedNodeIndex()).Text;
  10.   test.Text = objId.Text;
  11.   divEdit.Controls.Add(test);


 
:sweat:

mood
Publicité
Posté le 10-01-2005 à 11:20:16  profilanswer
 

n°949879
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-01-2005 à 11:48:28  profilanswer
 

A noter un truc assez "fun".
 
Si je demande à afficher mon champ caché "objId" (rafraîchit par le .Refresh() de mon TreeBloc), il est à la bonne valeur.
Mais lorsque je le reli pour alimenter une variable (ici, le .Text de mon objet Literal) je récupère la valeur précédente. :sweat:
 
http://magicbuzz.multimania.com/files/treebloc.png


Message édité par Arjuna le 10-01-2005 à 11:53:48
n°950072
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-01-2005 à 15:11:00  profilanswer
 

Là ça me gonfle sévère.
Je n'y arrive vraiment pas.
 
Y'a vraiment personne à qui s'est arrivé ? Vous m'étonnez sérieusement quand même...
 
Je viens de tenter de bourriner un coup (à défaut d'avoir un coup de pouce j'essaie n'importe quoi), et ça marche pas :
 

Code :
  1. public void OnSelectNode(Object sender, TreeViewSelectEventArgs e)
  2.  {
  3.   if (((TreeView) sender).GetNodeFromIndex(((TreeView) sender).SelectedNodeIndex).ID != Request.Form["objId"].ToString())
  4.   {
  5.                 ((TextBox) Page.FindControl("objId" )).Text = ((TreeView) sender).GetNodeFromIndex(((TreeView) sender).SelectedNodeIndex).ID;
  6. //    ((TextBox) Page.FindControl("objId" )).Text = e.NewNode;
  7.    ((Label) Page.FindControl("js" )).Text += "<script>document.Form1.submit();</script>";
  8.   }
  9.  }


 
Il part en délire total, il recharge en permanance, preuve qu'il ne prends pas en compte mon test (j'ai tout essayé dans le test, prendre le selectecIndex, la valeur du champ, la valeur récupérée en form, etc.)
 
Le but du jeu était ici de soumettre deux fois de suite lors de la sélection d'une node, histoire qu'au second refresh, dans le code je puisse lire la bonne valeur du selectedIndex. Mais non, la valeur affichée n'est visiblement pas la même qu'en interne, puisque ça refresh en boucle si jeme base sur la valeur qui est censée être dans la variable.
 
Bref. Help :sweat:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#/ASP.NET] Problem de refresh

 

Sujets relatifs
interface .NET[C#] MagicBuzz qui se remet au .NET, ça va être bô tiens !
problem sur codage xchatLOTS DTS Lancement A partir d'une page ASP
SVP aider moi: Problem a l'introUne erreur d'exécution en ASP?? non??? incroyable !!
problémes de rep parent (ASP) - (résolu)la référence .net FrameWork
Connexion avec SQLServer (ASP)[ASP] Lecture inachevée d'un fichier
Plus de sujets relatifs à : [C#/ASP.NET] Problem de refresh


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR