Selezionare o trovare item in listview

venerdì 26 settembre 2008 - 18.54

ilario Profilo | Senior Member

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
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 !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5