Avatar billede pigbear Nybegynder
17. november 2008 - 22:01 Der er 15 kommentarer

window.print() virker ikke helt

Jeg skal printe en gridview ud fra visual studio, og anvender en popup.htm fil til formålet.

Gridview´en vises fint på popup vinduet, men min window.print() funktion virker ikke, eller rettere, siden er blank når den printes ud. Men jeg har fundet ud af at hvis jeg kalder window.print() to gange så virker den ene printfunktion.

Jeg har følgende kode i min popup.htm:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
    <script src="../scripts/EUtil.js" language="javascript" type="text/javascript"></script>
</head>

<script language="javascript">
    <!--
    function SetSource()
    {
        document.all["main"].src = window.dialogArguments;
        window.print();

    }
    //-->
</script>

<frameset onload="SetSource()" border="0">
    <frame id="main" src="">
</frameset>
</html>


Håber nogen kan hjælpe med dette. Hvis nogen har en anden løsning uden brug af popup.htm er det også fint.

Jeg har prøvet at sætte siden i fokus med focus(); men det hjælper ikke. Hvis jeg anbringer en button på selve popup.htm som kalder window.print(); så virker udskriften som den skal, men det er ikke det jeg vil

Håber nogen kan hjælpe med dette !

Tak
mvh

Pigbear
Avatar billede w13 Novice
17. november 2008 - 22:47 #1
Mon ikke det hovedsageligt skyldes, at framens indhold endnu ikke er loadet?

I øvrigt er language="javascript" forældet og i dag erstattet af type="text/javascript".
Avatar billede w13 Novice
17. november 2008 - 22:48 #2
I øvrigt skal du bruge en frameset doctype, når du arbejder med frames, i stedet for en transitional doctype.
Avatar billede pigbear Nybegynder
18. november 2008 - 00:09 #3
hm det er muligt det er forældet, jeg kender ikke så godt til script.
men framens indhold er vel loadet, ellers ville main src vel give en fejl ville den ikke?



transitional doctype ? hvad/hvordan skriver jeg det ? Kan du uddybe lidt, så ovenstående kunne komme til at virke ?

mvh

Pigbear
Avatar billede roenving Novice
18. november 2008 - 09:52 #4
-- et vindue, der skal udskrives sskal også have focus, så skal man udskrive andre vinduer, skal man bruge følgende:

mitVindue.focus();
mitVindue.print();
Avatar billede pigbear Nybegynder
18. november 2008 - 10:03 #5
man kan ikke skrive popup.print() så det må være window.print(); og window.focus() du mener.
... men det virker som sagt heller ikke.

mvh
pigbear
Avatar billede w13 Novice
18. november 2008 - 10:05 #6
Nej, Roenving mener det, han skriver. =) Det skal være framens navn i stedet for mitVindue.
Avatar billede pigbear Nybegynder
18. november 2008 - 12:05 #7
Hej igen,

har nu prøvet: main.print(); men med samme resultat. popup.htm viser godt nok gridd´en, men den er blank på printeren...

Som sagt hvis jeg skriver print to gange dvs.:
main.print();
main.print();
.. så virker den ene af udskrifterne, men det er lidt træls at skulle vise to print vinduer frem for at få det til at virke

..nogen forslag.. ?
Avatar billede w13 Novice
18. november 2008 - 15:11 #8
Jeg gætter stadig på, at frame-siden ikke er loadet, når du printer første gang.

Du skrev:

"men framens indhold er vel loadet, ellers ville main src vel give en fejl ville den ikke?"

Nej, main.src vil ikke give fejl noget sted. Din kode sætter, hvilken side, som main.src skal vise. Det vil så gå i gang med at blive loadet, og imens det sker forsøger du at printe.
Avatar billede pigbear Nybegynder
18. november 2008 - 17:45 #9
Hej igen, har du noget forslag til løsning: Min kode ser indtil videre sådan ud:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

<html>
<script language="javascript">
    <!--
    function SetSource()
    {
        window.document.all["main"].src = window.dialogArguments;
//        window.document.all["main"].src = Popup.htm; giver fejl
     
        main.print(); //virker ikke, printer blank side
      //  main.focus();
      //  main.print();
      //  window.print();
    }
    //-->
</script>

<frameset onload="SetSource();">
    <frame id="main" src="";
    >
</frameset>
</html>

og jeg kalder den med følgende kode i c#:
btnPrint.Attributes.Add("onclick", BuildPopupCmd_1(formName, key, "700", "900", ret));

private string BuildPopupCmd_1(string formName, string key, string height, string width, string ret)
{
string tmp = "return ('true'==showModalDialog('Popup.htm', '"+ formName + "?" + key + "','dialogHeight:" + height + "px;dialogWidth:" + width + "px;resizable:yes') ? true : false);";
  return tmp;
}

Muligvis skal jeg oprette spørgsmålet i en anden kategori vedr. c#, men her kan i så se hele koden

mvh

Pigbear
Avatar billede w13 Novice
18. november 2008 - 17:49 #10
Måske bare rette:

main.print();

til:

main.onload = function() {
  main.print();
}
Avatar billede pigbear Nybegynder
19. november 2008 - 13:06 #11
Havde det bare virket, men ingen print dialog bliver aktiveret...
Avatar billede w13 Novice
19. november 2008 - 13:24 #12
Så prøv lige:

main.onload = function() {
  alert("Den er nu loadet!");
}
Avatar billede roenving Novice
19. november 2008 - 16:17 #13
-- har du prøvet:

main.focus();
main.print();

?-)
Avatar billede pigbear Nybegynder
19. november 2008 - 17:50 #14
Har lige prøvet, men med samme resultat, og alert funktionen bliver ikki kaldet:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

<html>

<script language="javascript">
    <!--
    function SetSource()
    {
        window.document.all["main"].src = window.dialogArguments;                   
        main.onload = function() {alert("Den er nu loadet!");}
        main.focus();     
        main.print();
       
    }
    //-->
</script>

<frameset onload="SetSource();">
    <frame id="main" src=""
    >
</frameset>


</html>
Avatar billede w13 Novice
23. august 2009 - 18:26 #15
Fået løst problemet?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester