Listview content mailen

Status
Niet open voor verdere reacties.

Rickymundo

Gebruiker
Lid geworden
20 aug 2012
Berichten
30
Hoi hoi,

Vraagje,

Ik heb een form dat data ophaalt uit een Mysql database en deze netjes in een listview laat zien, voorbeeld:

------------------------------------------------------------------------------------------
| Datum | User |Onderwerp | Details |
-----------------------------------------------------------------------------------------
| 20-08-2010| Beheerder | Informatie | Klant wilde info hebben over product x |
| 20-08-2012| Beheerder | navraag | Klant wilde info hebben over product y |

De bedoeling is nu dat middels button1 dit in een mail wordt gezet en wordt gemaild.
Het stuk over mailen is gelukt, echter hoe krijg ik deze inhoud ( de inhoud van de listview ) dus mee, en daarmee bedoel ik alle records van de listview.

Enig idee? Ik hoop dat dit duidelijk is.

Thanks a lot alvast !
 
Not really, mailen lukt wel, alleen de inhoud van de listview meezenden... daar loop ik op vast.
 
Bedoel je zoiets?


Code:
            StringBuilder output = new StringBuilder();

            foreach (ListViewItem item in lvEntries.Items)
            {
                var date = item.SubItems[0].ToString();
                var user = item.SubItems[1].ToString();
                var subject = item.SubItems[2].ToString();
                var details = item.SubItems[3].ToString();
                
                output.Append(string.Format("| {0}", date));
                output.Append(string.Format("| {0}", user));
                output.Append(string.Format("| {0}", subject));
                output.Append(string.Format("| {0}", details));
                output.AppendLine(" |");
            }

            string result = output.ToString();

            //user result where needed
 
Uh... dunnow, looks like it is.
Ga het vanavond even uitproberen in een test omgeving. Update zal volgen!
 
Hello,

Inmiddels even rommelen en het script enigzins verbouwt maar ik kom er maar niet aan uit. Visual Studio geeft ook errors ( blauwe golfjes ) aan bij het stuk van FOREACH, rest is ok btw.

Overigens heb ik date naar string gezet omdat het puur statische text is.

EDIT: mijn listview heet overigens Listview1, to keep it simple....

Code:
    Private Sub Button8_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        If MessageBox.Show("Make sure Outlook is running. Is Outlook running?", "Mail customerlog to myself.", _
 MessageBoxButtons.YesNo, MessageBoxIcon.Question) _
 = DialogResult.Yes Then
            On Error GoTo ErrorHandler

            Dim objOutlook
            Dim objNameSpace

            Dim mItem

            Dim strReceipient
            Dim strSubject
            Dim strBodyText
            Dim strMsg

            Dim pAttachments
            Dim strAttach


            Const olMailItem = 0
            strReceipient = Label13.Text


            strSubject = "- CUSTOMERLOG - "

            Dim datum As Date
            Dim user As String
            Dim subject As String
            Dim details As String
            Dim output As String
            Dim result As String


            foreach (Listviewitem item in listview1.Items)
            {
                datum = item.SubItems[0].ToString();
                user = item.SubItems[1].ToString();
                subject = item.SubItems[2].ToString();
                details = item.SubItems[3].ToString();

            output = output + (String.Format("| {0}", datum))
            output = output + (String.Format("| {0}", user))
            output = output + (String.Format("| {0}", subject))
            output = output + (String.Format("| {0}", details))
            output = output + (" |")
            }

            result = output.ToString()






            strBodyText = " - CUSTOMERLOG - " & vbLf & vbLf & output & vbLf & vbLf & "THIS IS AN AUTOMATIC GENERATED MAIL."

            objOutlook = CreateObject("Outlook.application")
            objNameSpace = objOutlook.GetNamespace("MAPI")
            mItem = objOutlook.CreateItem(olMailItem)


            mItem.To = strReceipient
            mItem.Subject = strSubject
            mItem.Body = strBodyText

            If Len(strAttach) > 0 Then
                pAttachments = mItem.Attachments
                pAttachments.Add(strAttach)
            End If

            mItem.send()


            mItem = Nothing
            objNameSpace = Nothing
            objOutlook = Nothing


        End If
        Exit Sub

ErrorHandler:
        MsgBox("Problem detected, perhaps you don't have Outlook or it wasn't running properly...")
        Resume Next



    End Sub
 
Laatst bewerkt:
Mijn code snippet is in C# niet in VB de foreach syntax bij VB is een beetje anders. Als je even op google zoekt naar VB en foreach zul je zien hoe de syntax moet zijn.
 
Ah, that explains a lot.
Google erop nageslagen maar ik denk dat ik de listview niet snap.
Bijvoorbeeld:
De inhoud van een textbox pak je door textbox1.text
De inhoud van een geheel listview is dan ??? ( ik dacht listview1.values of listview1.items o.i.d. ). Daardoor lukt dit niet:

Code:
 strSubject = "- CUSTOMERLOG - "

            Dim datum As Date
            Dim user As String
            Dim subject As String
            Dim details As String
            Dim output As String
            Dim result As String


            For Each output In ListView1.Items
            {
                datum = ListView1.Items[0].ToString();
                user = item.SubItems[1].ToString();
                subject = item.SubItems[2].ToString();
                details = item.SubItems[3].ToString();

                output = output + (String.Format("| {0}", datum))
                output = output + (String.Format("| {0}", user))
                output = output + (String.Format("| {0}", subject))
                output = output + (String.Format("| {0}", details))
                output = output + (" |")
            }

                result = output.ToString()
 
Laatst bewerkt door een moderator:
Je pakt de inhoud van een listview per regel (listviewitem) niet in een keer.

Ik heb even een VB project gestart en geprobeerd VB te doen, geen idee of het werkt niet getest. Ik doe zelf niets met VB.

Code:
        Dim stringBuilder As StringBuilder

        stringBuilder = New StringBuilder()
        
        For Each lvi As ListViewItem In ListView1.Items
            stringBuilder.AppendFormat("{0} {1} {2} {3}\n", lvi.SubItems(0), lvi.SubItems(1), lvi.SubItems(2), lvi.SubItems(3), )
        Next

        Dim output As String

        output = stringBuilder.ToString()
 
Thanks mate,

Ik probeer het te vertalen naar VB en ben nog aan het rommelen met:

Code:
Dim datum As String
            Dim user As String
            Dim subject As String
            Dim details As String
            Dim output As String
            Dim item As String
            Dim result As String
            output = ""

            For Each item In ListView1.Items

                datum = ListView1.Items(1).ToString
                user = ListView1.Items(2).ToString
                'subject = item.SubItems[2].ToString();
                'details = item.SubItems[3].ToString();

                output = output + datum
                output = output + user
                'output = output + (String.Format("| {0}", subject))
                'output = output + (String.Format({0}", details))

            Next

            result = output.ToString()


Als ik eruit ben zal ik het hier posten ( hulp is altijd welkom ).
 
Wat gaat hier toch mis?

Code:
            strSubject = "- CUSTOMERLOG - "

            Dim datum As String
            Dim user As String
            Dim subject As String
            Dim details As String
            Dim output As String
            Dim result As String
            output = ""

            For Each item In ListView1.Items

                datum = ListView1.Items(0).ToString
                user = ListView1.Items(1).ToString
                subject = ListView1.Items(2).ToString
                'details = item.SubItems[3].ToString();
                'output = output + (String.Format("| {0}", subject))
                'output = output + (String.Format({0}", details))
                output = output + datum + "  " + user + " " + subject + vbNewLine

            Next



            strBodyText = " - CUSTOMERLOG - " & vbLf & vbLf & output & vbLf & vbLf & "THIS IS AN AUTOMATIC GENERATED MAIL."
/[CODE]
 
Laatst bewerkt:
Zet je code even in een
Code:
[CODE]
[/CODE] tag.

Heb je geprobeerd wat ik als laatste heb gepost?


*edit: ik zie dat ik wel een komma teveel heb getypt :P
 
Laatst bewerkt:
Bedankt voor je hulp maar op jouw manier kom ik niet verder dan:

Code:
            Dim stringBuilder() As String

            For Each lvi As ListViewItem In ListView1.Items
                stringBuilder.appendformat(lvi.SubItems(0), lvi.SubItems(1))
            Next

            Dim output As String

            output = stringBuilder.ToString()

met de nodige errors....
 
ok nog een VB poging:

kopieer deze class eens in je project

Code:
Imports System.Text

Public Class ListViewHandler

    Public Function GetData(lv As ListView) As String

        Dim stringBuilder As StringBuilder

        stringBuilder = New StringBuilder()



        For Each lvi As ListViewItem In lv.Items
            stringBuilder.AppendFormat("{0} {1} {2} {3}\n", lvi.SubItems(0), lvi.SubItems(1), lvi.SubItems(2), lvi.SubItems(3))
        Next

        Return stringBuilder.ToString();
    End Function


End Class

te gebruiken zo: (werkt zoals je ziet met 4 columns)

Code:
        Dim lvh As ListViewHandler
        lvh = New ListViewHandler()
        Dim data = lvh.GetData(ListView1)


data zou dan alle text in de listview moeten zijn
 
Inmiddels heb ik dit:

Code:
 strSubject = "- CUSTOMERLOG - "

            Dim datum As String
            Dim user As String
            Dim subject As String
            Dim details As String
            Dim output As String
            Dim result As String
            output = ""

            For Each item In ListView1.Items

                user = item.subitems(0).ToString
                datum = item.subitems(1).ToString
                subject = item.subitems(2).ToString
                details = item.subitems(3).ToString
                output = user + " " + datum + " " + subject + " " + details + vbNewLine
            Next



            strBodyText = " - CUSTOMERLOG - " & vbLf & vbLf & output & vbLf & vbLf & "THIS IS AN AUTOMATIC GENERATED MAIL."

BUT: Ondanks het een for each is, pakt hij toch maar 1 line en de output ziet er zo uit:

ListViewSubItem: {Ricardo} ListViewSubItem: {20-8-2012 15:27:31} ListViewSubItem: {Informatie} ListViewSubItem: {Dennis XXX gesproken, wil edk 107XXX, 1074XXX en edk 10XXX alsnog laten doorvoeren.}
 
bij:

output = user + " " + datum...........

gebruik eens output +=

(een string builder doet dit allemaal voor je met Append en AppendLine zet hij er een 'new line' achter etc)
 
Yeah baby!!! :cool: Thanks A LOT!!!

one more thing nog:


- CUSTOMERLOG -

ListViewSubItem: {Ricardo} ListViewSubItem: {20-8-2012 15:18:36} ListViewSubItem: {Informatie} ListViewSubItem: {Nieuwe T**** Flip ******}

ListViewSubItem: {Ricardo} ListViewSubItem: {20-8-2012 15:16:55} ListViewSubItem: {Informatie} ListViewSubItem: {Juni 2011 upgrade 20mb ZGB doorgevoerd binnen looptijd door dhr *** en *****. INT1*****}



THIS IS AN AUTOMATIC GENERATED MAIL.

Hoe krijg ik die ListViewSubItem's eruit in de mail ?
 
Bloodshed, I can almost kiss you!!! It works!!! Duizend maal dank ofcourse maareuh... snappen doe ik het niet.
.ToString herhaalt ListViewSubItem ?
.text doet dat niet ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan