Atlas et Visual Studio 2005

Résolu
lilisweety Messages postés 4 Date d'inscription lundi 20 septembre 2004 Statut Membre Dernière intervention 3 avril 2006 - 31 mars 2006 à 17:19
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 3 avril 2006 à 13:26
Oyé ! Oyé !

Je rencontre une "petite" difficulté avec Atlas... J'avoue ne pas trop connaître le sujet mais je vais essayé d'être claire...
Donc, j'ai ajouté atlas à un projet (énorme projet, énorme budget, beaucoup de taf...) J'utilise surtout le fonctionnalité de "refresh" de page (la balise <atlas : update panel...). Jusqu'ici tout va bien! Sauf...Sauf... Que j'ai une barre de boutons d'action qui, pour deux d'entre eux, font appel à du code javascript pour imprimer une gridview et pour télécharger un fichier Excel. Et depuis la mise en place de ces merveilleuses balises, mais boutons , ils marchent plus... C'est une catastrophe!!!
J'ai exécuter en mode pas à pas et tout se passe comme si ça fonctionnait... Le seul moyen que j'ai trouvé jusqu'à aujourd'hui est de sortit ma barre de boutons de mes balises atlas... Mais c'est pas top! Quelqu'un a une idée siouplé?

8 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
3 avril 2006 à 13:26
la n'est pas le problème, mais comment est-ce que c'est censé fonctionner ?

lorsque tu cliques sur le bouton, tu as un postback, et ensuite tu écris quoi ? une balise script au millieu de nul part ??? je ferrais plutot un truc du genre

Cyril - MVS - MCP
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
31 mars 2006 à 19:08
Bonjour, peut on voir le bouton de ta barre de bouton ?

A mon avis c'est ton code javascript où il doit y avoir un problème.


<HR>
Cyril - MVS - MCP
0
lilisweety Messages postés 4 Date d'inscription lundi 20 septembre 2004 Statut Membre Dernière intervention 3 avril 2006
3 avril 2006 à 10:18
Bonjour!

Mes boutons sont des webcontrols. A l'appui, on appelle une méthode qui fait appel notamment à du code javascript.



Voilà le code behind de ma barre de bouton(c'est une peu long dsl...) : (voir plus bas la méthode d'impression)
********************************************************

public
partial
class ActionButton : System.Web.UI.UserControl


{


#region Constantes



public
enum EnumModePage


{


Inquiry,


Detail,


Specific


}


#endregion


#region Données Membres



private
string _sCommandName =
"";



private
string _sValidationGroup =
"Validate";


#endregion


#region Propriétés



public
string CommandName


{



get {
return _sCommandName; }


}



public
string ValidationGroup


{



get {
return _sValidationGroup; }



set { _sValidationGroup =
value; }


}


#endregion Propriété





#region EventHandler



// Evenement visible de l'extérieur



public
event
EventHandler ButtonClick;


#endregion


#region Evenements de la page



/// <summary>



/// Chargement de la page



/// </summary>



///



///



protected
void Page_Load(
object sender,
EventArgs e)


{


}


#endregion Evenements de la page


#region Evenements des controles



/// <summary>



/// Click sur n'importe quel bouton



/// </summary>



///



///



protected
void Button_Click(
object sender,
EventArgs e)


{



// Evenement défini



if ((e !=
null) && (sender
is Button))


{



// Fixe le paramètre CommandName


_sCommandName = ((Button)sender).CommandName;



// Lève l'évenement


ButtonClick(sender, e);


}


}


#endregion Evenements des controles


#region Méthodes





/// <summary>



/// Initialisation de base des boutons



/// </summary>



public
void InitButtons()


{



// Init de la propriété permettant de différencier



// les boutons


ABN_btnBack.CommandName = Business.BACK;


ABN_btnCreate.CommandName = Business.CREATE;


ABN_btnDelete.CommandName = Business.DELETE;


ABN_btnDownLoad.CommandName = Business.DOWNLOAD;


ABN_btnModify.CommandName = Business.MODIFY;


ABN_btnPrint.CommandName = Business.PRINT;


ABN_btnValidate.CommandName = Business.VALIDATE;


ABN_btnView.CommandName = Business.VIEW;



// Pour la validation de l'écran


ABN_btnValidate.ValidationGroup = _sValidationGroup;


}



/// <summary>



/// Initialisation spécifique des boutons



/// selon les fonctionnalités autorisées et le mode de la page



/// </summary>



public
void InitButtons(


FabNet.BusinessLogicLayer.Functionnality oFunctionnality,


EnumModePage eModePage


)


{



// Init de la propriété permettant de différencier



// les boutons


InitButtons();






// Cas d'une page de recherche



if (eModePage == EnumModePage.Inquiry)


{


ABN_btnCreate.Visible = oFunctionnality.Create;


ABN_btnDelete.Visible = oFunctionnality.Delete;


ABN_btnDownLoad.Visible = oFunctionnality.DownLoad;


ABN_btnModify.Visible = oFunctionnality.Modify;


ABN_btnPrint.Visible = oFunctionnality.Print;


ABN_btnView.Visible = oFunctionnality.View;


ABN_btnBack.Visible =
false;


ABN_btnValidate.Visible =
false;


}



// Cas d'une page détail



if (eModePage == EnumModePage.Detail)


{


ABN_btnBack.Visible = oFunctionnality.Back;


ABN_btnValidate.Visible = oFunctionnality.Validate;


ABN_btnCreate.Visible =
false;


ABN_btnDelete.Visible =
false;


ABN_btnDownLoad.Visible =
false;


ABN_btnModify.Visible =
false;


ABN_btnPrint.Visible =
false;


ABN_btnView.Visible =
false;


}



// Cas d'une page spécifique



if (eModePage == EnumModePage.Specific)


{


ABN_btnBack.Visible = oFunctionnality.Back;


ABN_btnValidate.Visible = oFunctionnality.Validate;


ABN_btnCreate.Visible = oFunctionnality.Create;


ABN_btnDelete.Visible = oFunctionnality.Delete;


ABN_btnDownLoad.Visible = oFunctionnality.DownLoad;


ABN_btnModify.Visible = oFunctionnality.Modify;


ABN_btnPrint.Visible = oFunctionnality.Print;


ABN_btnView.Visible = oFunctionnality.View;


}



// Message de confirmation sur les boutons


ABN_btnDelete.OnClientClick =
"SetConfirmMessage('" + Resources.ActionButton.Delete_ConfirmMessage +
"')";



// ABN_btnBack.OnClientClick = "SetHistoryBack()";


}


#endregion Méthodes



/// <summary>



/// Récupère un bouton selon le CommandName



/// </summary>



///



/// <returns></returns>



private Button GetButton(
string sCommandName)


{



foreach (Control oButton
in
this.Controls)


{



if (oButton
is Button)


{



if (((Button) oButton).CommandName == sCommandName)


{



return (Button) oButton;


}


}


}



return
null;


}



/// <summary>



/// Permet d'affecter la propriété Enabled d'un bouton



/// </summary>



/// CommandName du bouton recherché



/// Nouvelle valeur



public
void SetButtonEnabled(
string sCommandName,
bool bEnabled)


{


Button oButton;


oButton = GetButton(sCommandName);



if (oButton !=
null)


{



if (oButton.Visible ==
true)


{


oButton.Enabled = bEnabled;


}


}


}



/// <summary>



/// Permet d'affecter la propriété Visible d'un bouton



/// </summary>



/// CommandName du bouton recherché



/// Nouvelle valeur



public
void SetButtonVisible(
string sCommandName,
bool bVisible)


{


Button oButton;


oButton = GetButton(sCommandName);



if (oButton !=
null)


oButton.Visible = bVisible;


}



/// <summary>



/// Permet d'affecter la propriété ValidationGroup d'un bouton



/// </summary>



/// CommandName du bouton recherché



/// Nouvelle valeur



public
void SetButtonValidationGroup(
string sCommandName,
string sValidationGroup)


{


Button oButton;


oButton = GetButton(sCommandName);



if (oButton !=
null)


oButton.ValidationGroup = sValidationGroup;


}



/// <summary>



/// Permet d'activer ou non la propriété ValidationGroup



/// du controle



/// </summary>



/// CommandName du bouton recherché



/// Activation ou non



public
void SetButtonValidationGroup(
string sCommandName,
bool bValidationGroup)


{


Button oButton;


oButton = GetButton(sCommandName);



if (oButton !=
null)


{



if (bValidationGroup)


{


oButton.ValidationGroup = _sValidationGroup;


}



else


{


oButton.ValidationGroup =
"";


}


}


}



/// <summary>



/// Permet d'ajouter un nouveau bouton de commande



/// </summary>



/// ID du bouton



/// Texte à afficher



/// Commande associée



/// Position du bouton dans les controls



public
void AddButton(
string p_sID,
string p_sText,
string p_sCommandName,
int p_iPosition)


{


Button oButton =
new Button();


oButton.ID = p_sID;


oButton.Text = p_sText;


oButton.CommandName = p_sCommandName;


oButton.Click += Button_Click;



this.Controls.AddAt(p_iPosition, oButton);


oButton.Visible =
true;


}



/// <summary>



/// Permet de rendre actif ou non les boutons



/// selon qu'une ligne est sélectionnée ou non



/// </summary>



/// Ligne sélectionnée?



public
void InquirySelected(
bool bSelectedInquiry)


{


ABN_btnDelete.Enabled = bSelectedInquiry;


ABN_btnModify.Enabled = bSelectedInquiry;


ABN_btnView.Enabled = bSelectedInquiry;


}



/// <summary>



/// Bloque tous les controles au besoin



/// </summary>



public
void DetailModeView(AO.ITEC.UI.Page oPage,
string sMode)


{



if (sMode == Business.VIEW)


{


ABN_btnValidate.Visible =
false;


oPage.ControlsLock();


}


}


}

Et voilà la méthode d'impression :


public
static
void PrintWebControl(
Control ctrlPrint,
string strScript)


{



if (ctrlPrint
is
WebControl)


{



//Unit unitPixel = new Unit(50, UnitType.Pixel);


((
WebControl)ctrlPrint).Attributes.Add(
"Width",
"100%");



if (ctrlPrint
is
GridView)


{



GridView gv = (
GridView)ctrlPrint;



// Supprimer la pagination de la grille



// et rafraichir les données



if (gv.AllowPaging ==
true)


{


gv.AllowPaging =
false;


gv.DataBind();


}



for (
int i = 0; i < gv.Columns.Count; i++)


{



if (gv.Columns[i].GetType().ToString().IndexOf(
"CommandField") >= 0)


{


gv.Columns[i].Visible =
false;


}


}



// Attributs d'affichage et d'impression


gv.CellPadding = 0;


gv.CellSpacing = 0;


gv.BorderWidth = 1;


gv.BorderStyle =
BorderStyle.Solid;


}


}



// Ajouter le script passé en paramètre



Page pgPrint =
new
Page();


pgPrint.EnableTheming =
false;



if (!
string.IsNullOrEmpty(strScript))


{


pgPrint.ClientScript.RegisterStartupScript


(ctrlPrint.GetType(),



"PrintJavaScript",


strScript);


}



// Construction de la page à imprimer



// Ajout du formulaire à la page avec les attributs serveurs



HtmlForm frmHtml =
new
HtmlForm();


pgPrint.Controls.Add(frmHtml);


frmHtml.Attributes.Add(
"runat",
"server");


frmHtml.Controls.Add(ctrlPrint);



// Ajout du code rappellant la page à l'origine de l'impression



string strScreen =
"<script>function window.onafterprint(){history.back(1);}</script>";



StringWriter stringWrite =
new
StringWriter();



HtmlTextWriter htmlWrite =
new
HtmlTextWriter(stringWrite);


htmlWrite.Write(strScreen);


pgPrint.EnableEventValidation =
false;


pgPrint.DesignerInitialize();


pgPrint.RenderControl(htmlWrite);



// Déclenchement de l'impression



string strHTML = stringWrite.ToString().Replace(
"rules="cols"",
"rules="all"");



// Bidouille SMI : pour afficher le "Border" des lignes et des colonnes, il faut



// remplacer rues="cols" par rules="all". Je n'ai pas trouvé où et comment et en



// plus ça me gonfle!


strHTML = strHTML.Replace(
"rules="cols"",
"rules="all"");


strHTML = strHTML.Replace(
"border="0"",
"border="1"");



HttpContext.Current.Response.Clear();



HttpContext.Current.Response.Write(strHTML);



HttpContext.Current.Response.Write(
"<script>window.print();</script>");



HttpContext.Current.Response.End();


}
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
3 avril 2006 à 10:28
Oula, ca fait bien beaucoup de code la :)

j'ai vaguement parcouru, mais tu peux resumer ? ;p je comprend pas trop ce que tu fais, pourquoi tant de code si ce n'est que pour faire de l'impression ?

btn1.attributes.add("onclick", "window.print()"); ca te suffirait pas ? car la sur le click d'un bouton, tu fais une vérification coté serveur puis tu renvoies quelque chose coté client ? pourquoi ne pas faire cette vérification coté client ?

Sinon le pourquoi de ca fonctionne pas, je pense que c'est parce que tu injecte du <script au beau millieu de ta page, et il n'a pas l'air d'etre parsé, lors de l'ajout donc il n'est pas executé. Il me semble pourtant qu'Atlas avait géré ca :s


<HR>
Cyril - MVS - MCP
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
3 avril 2006 à 10:29
j'ai peut etre une autre idée :)

HttpContext.Current.Response.Write(
"<script>window.print();</script>");

tu n'ecris pas dans un updatepanel, donc il n'est pas mis à jour ! il faut obligatoirement ecrire des choses dans un updatepanel si tu veux mettre à jour coté client.


<HR>
Cyril - MVS - MCP
0
lilisweety Messages postés 4 Date d'inscription lundi 20 septembre 2004 Statut Membre Dernière intervention 3 avril 2006
3 avril 2006 à 10:41
Le code est compliqué car il y a une vérification sur les droits de l'utilisateur connecté pour l'utilisation des boutons. De plus on est en architecture trois tiers... Et enfin, j'avoue je débute...


Pourrais-tu détailler ta dernière réponse car j'avoue rester un peu perplex...
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
3 avril 2006 à 10:49
quand on clique sur un bouton qu'est-ce qu'il devrait se passer ?

détails les différentes etapes, et je verrais pour ajuster ma réponse ;)


<HR>
Cyril - MVS - MCP
0
lilisweety Messages postés 4 Date d'inscription lundi 20 septembre 2004 Statut Membre Dernière intervention 3 avril 2006
3 avril 2006 à 11:22
Bon visiblement, p'tit souci avec mon post...
Donc, les étapes sont :
- configuration de l'unité d'impression
- configuration de la grille à imprimer
- configuration des paramètres de la page
- ouverture de la fenêtre de choix d'imprimante:

- visblement cette étape ne s'effectue pas correctement...
0
Rejoignez-nous