Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Selezionare o trovare item in listview
venerdì 26 settembre 2008 - 18.54
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
ven 26 set 2008 - 18:54
ciao
sicuramente è facile ma non ci riesco a trovare la soluzione giusta
devo fare una stampa di una listview con ragruppamento.
io uso printducument ecc...
sono riuscito a fare tutta la stampa mi manca solo di trovare se ci sono ancora righe da stampare
questo è il codice
dim nrIdGruppo as integer= 0
dim nrIdriga as integer= 0
Private Sub PrintRubrica_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintRubrica.PrintPage
e.Graphics.PageUnit = GraphicsUnit.Millimeter
' colore
Dim Colore As New SolidBrush(Color.FromArgb(102, 51, 0))
Dim ColorPens As New Pen(Colore, 0.3)
' variabili
Dim linesPerPage As Integer = 18
Dim yPos As Single = 0
Dim RigaStampa As Integer = 0
Dim gruppo As Integer
Dim riga As Integer
Dim leftMargin As Single = e.MarginBounds.Left
Dim topMargin As Single = e.MarginBounds.Top
Dim FontRiga As New Font("verdana", 12)
Dim fontgruppo As New Font("verdana", 13, FontStyle.Bold)
Dim FormatStringa As New StringFormat
Dim formatRiga As New StringFormat
'disegna sfondo
Dim Rettsfondo As New Rectangle(0, 0, e.PageBounds.Width, e.PageBounds.Height)
e.Graphics.FillRectangle(Brushes.White, Rettsfondo)
' disegno titolo
Dim RettNomi As New Rectangle(140, 10, 50, 8)
FormatStringa.Alignment = StringAlignment.Center
FormatStringa.LineAlignment = StringAlignment.Center
DrawRoundRectPrint(e, ColorPens, RettNomi, 2)
e.Graphics.DrawString("Rubrica", New Font("Verdana", 20, FontStyle.Bold), Colore, RettNomi, FormatStringa)
'disegna contorni righe
Dim RettRighe As New Rectangle(12, 30, 270, 160)
DrawRoundRectPrint(e, ColorPens, RettRighe, 3)
If nrIdGruppo > 0 Then nrIdGruppo = nrIdGruppo - 1
For gruppo = nrIdGruppo To lswLista.Groups.Count - 1
RigaStampa += 1
If RigaStampa + lswLista.Groups.Item(gruppo).Items.Count - 1 >= linesPerPage Then
gruppo = gruppo + 1
Exit For
End If
yPos = 32 + RigaStampa * FontRiga.GetHeight(e.Graphics)
formatRiga.Alignment = StringAlignment.Near
e.Graphics.DrawString(lswLista.Groups.Item(gruppo).Header, fontgruppo, Colore, 17, yPos, formatRiga)
RigaStampa += 1
For riga = 0 To lswLista.Groups.Item(gruppo).Items.Count - 1
If RigaStampa > linesPerPage Then Exit For
RigaStampa += 1
yPos = 32 + RigaStampa * FontRiga.GetHeight(e.Graphics)
'disegna le singole righe
With (lswLista.Groups.Item(gruppo))
'seleziona la riga
.Items(riga).Selected = True
'nome
formatRiga.Alignment = StringAlignment.Near
If .Items(riga).Text.Length > 45 Then
e.Graphics.DrawString(.Items(riga).SubItems(1).Text.Remove(45, (lswLista.Items(RigaStampa).Text.Length - 45)), FontRiga, Colore, 17, yPos, formatRiga)
Else
e.Graphics.DrawString(.Items(riga).SubItems(1).Text, FontRiga, Colore, 17, yPos, formatRiga)
End If
'Telefono
formatRiga.Alignment = StringAlignment.Near
e.Graphics.DrawString(.Items(riga).SubItems(2).Text, FontRiga, Colore, 90, yPos, formatRiga)
'fax
formatRiga.Alignment = StringAlignment.Near
e.Graphics.DrawString(.Items(riga).SubItems(3).Text, FontRiga, Colore, 140, yPos, formatRiga)
'email
formatRiga.Alignment = StringAlignment.Near
e.Graphics.DrawString(.Items(riga).SubItems(4).Text, FontRiga, Colore, 170, yPos, formatRiga)
'sito
formatRiga.Alignment = StringAlignment.Near
e.Graphics.DrawString(.Items(riga).SubItems(5).Text, FontRiga, Colore, 210, yPos, formatRiga)
End With
Next riga
RigaStampa += 1
Next gruppo
nrIdGruppo = gruppo
nridriga = lswLista.SelectedItems(0).Index '????????????'' non funziona neanche inserendolo nel cilo delle righe o dei gruppi
' se ci sono altre record
'If nrIdGruppo < lswLista.Groups.Count Then
'If nridriga < lswLista.Items.Count Then
If nridriga < lswLista.Items.Count Then[/code] MessageBox.Show(nridriga & " " & lswLista.Items.Count)
'e.HasMorePages = True
Else
e.HasMorePages = False
nrIdGruppo = 0
End If
se utilizzo i gruppi per controllare la fine mi funziona perfettamente, ma non stampa le righe dell'ultimo gruppo
allora avevo pensato di utilizzare le righe, ma se chiedo qual'è l'indice dellariga mi passa un indice all'interno del gruppo come trovo l'indice di quella riga in generale
grazie
ilario
spero di essermi spiegato bene
sono riuscito dopo vari tentativi, a trovare una soluzione
End With
Next riga
nridriga = nridriga + riga ' dopo il ciclo gli sommo l'ultima riga del gruppo
RigaStampa += 1
Next gruppo
nrIdGruppo = gruppo
' se ci sono altre record
If nridriga < lswLista.Items.Count Then[/code] 'e.HasMorePages = True
Else
e.HasMorePages = False
nrIdGruppo = 0
nridriga = 0
End If
l'unica cosa che non capisco è perchè non si puo avere l'indice globale del item selezionato mi ritorna quello del gruppo
grazie comunque
ciao
ilario
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !