Avatar billede sjaka Nybegynder
05. oktober 2004 - 15:14 Der er 1 kommentar og
1 løsning

Udskrive indholdet at ListView

Hej.

Jeg vil gerne udskrive indholdet af et listview til min printer. Mit listview inderholder 3 kolonner.

Kom gerne med et eksempel.

Det skulle gerne se nogenlunde sådan her ud på printeren, bare et eksempel:


Nr.        Titel                      Pris

98777      You Got Served              35,-
23531      Titanic                      25,-


osv.. håber I forstår hvad jeg mener :)
Avatar billede jepsen999 Nybegynder
05. oktober 2004 - 18:57 #1
private void button3_Click(object sender, System.EventArgs e)
        {
            System.Drawing.Printing.PrintDocument pdc = new System.Drawing.Printing.PrintDocument();
            pdc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(pdc_PrintPage);
            pdc.DocumentName = "Listview";
            pdc.Print();
        }

        private void pdc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Font f = new Font("arial",14);
            Brush brush = SystemBrushes.ControlText;

            float venstre = 20;
            float xpos = venstre;
            float ypos = 20;
            float spacing = 5;

            // find højde med den angivne font
            float hoejde = e.Graphics.MeasureString(this.listView1.Columns[0].Text,f).Height;
            // find max bredde på en kolonne
            float[] breddeArray = new float[this.listView1.Columns.Count];

            // find max bredde og udskriv columnheader
            for (int i=0;i<this.listView1.Columns.Count;i++)
            {
                ypos = venstre;
                breddeArray[i] = this.FindMaxSize(e.Graphics,f,i);
                string t = this.listView1.Columns[i].Text;
                e.Graphics.DrawString(t,f,brush,xpos,ypos);
               

                ypos += hoejde + spacing;

                // udskriv listview-items
                for (int j=0;j<this.listView1.Items.Count;j++)
                {
                    ListViewItem item = this.listView1.Items[j];
                    e.Graphics.DrawString(item.SubItems[i].Text,f,brush,xpos,ypos);
                    ypos += hoejde + spacing;
                }
                xpos += breddeArray[i] + spacing;               
            }

        }

        private float FindMaxSize(System.Drawing.Graphics g,Font f,int column)
        {
            float max = g.MeasureString(listView1.Columns[column].Text,f).Width;
            foreach (ListViewItem item in this.listView1.Items)
            {
                SizeF size = g.MeasureString(item.SubItems[column].Text,f);
                if (size.Width > max)
                {
                    max = size.Width;
                }
            }
            return max;
        }
Du kommer nok i problemer hvis teksten er breddere end papirets bredde, men det kan du også tjekke for, hvis det bliver aktuelt.
Avatar billede sjaka Nybegynder
06. oktober 2004 - 09:28 #2
Jo taaak! (hiphop style)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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