Součet položek v ListView a jeho zobrazení   zodpovězená otázka

VB.NET, WinForms

Zdravím, mám program, ve kterém přidávám položky do ListView1 ve Form1 a položky se ukládájí do txt souboru. Potom zmáčknu tlačítko a otevře se Form2, ve kterém mám tlačítko "zobrazit text" a TextBox. Po zmáčknutí tlačítko "zobrazit text" by se měl načíst txt soubor (s položkami s ListView) + vypsat datum + sečtené všechny položky (ze sloupce v ListView, ve kterém jsou čísla).

Dim UvodniFormular As New UvodniFormular 'Form1

Private Sub NewToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewToolStripButton.Click
     'načíst soubor
        Dim soubor As StreamReader
        soubor = New StreamReader("database.txt")
        TextBox1.Text = soubor.ReadToEnd
        soubor.Close()
        'přidat datum a součet
        Dim soucet As Object = UvodniFormular.ListView1.Items.Count

        Dim suma As Double = 0
        For i = 0 To soucet - 1
            Dim soucet2 As String = UvodniFormular.ListView1.Items(i).SubItems(1).Text
            suma = suma + CDbl(soucet2)
        Next

        TextBox1.Text = My.Computer.Clock.LocalTime & vbCrLf & vbCrLf & TextBox1.Text & vbCrLf & vbCrLf & CStr(suma)
       TextBox1.Select(0, 0)
        

Kod se mi zda v poradku, ale po zmačknutí tlačítka se na místě součtu zobrazí 0.

Nevím, proč se položky nesečtou a nezobrazí správně.

Poradí mi s tím někdo?

Děkuju za odpověď

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

proč ,áte součet jako object?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
Dim soucet As integer= UvodniFormular.ListView1.Items.Count
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pořád to dává výsledek 0

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zřejmě nerozhoduje uváděný kód, ale neuvedený obsah ListView.

Prověřte si (krokujte), co se děje v opakovacím cyklu - co obsahuje poměnná "součet" - provede se cyklus? Pokud ano, co je v proměnné "soucet2"? Má "soucet2" obsah, který lze převést na číslo? Není dokonce jen prázdný (třeba soucet2 = "")?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Trochu jsem upravil kód:

   Dim suma As Double = 0
        For i = 0 To UvodniFormular.ListView1.Items.Count - 1
            suma = suma + CDbl(UvodniFormular.ListView1.Items(i).SubItems(1).Text)
        Next
        TextBox1.Text = My.Computer.Clock.LocalTime & vbCrLf & vbCrLf & TextBox1.Text & vbCrLf & vbCrLf & CStr(suma)

TextBox1.Select(0, 0)

To samé jsem dal do prvního formuláře (Form1)

V průběhu ladění měl ListView1.Items.Count pro Form1 hodnotu 13 (podle 13 položek v listviewú), ale pro Form2 měl hodnotu 0.

Myslím, že v tom je problém.

Proč je ve form11(kde je listview) hodnota ListView1.Items.Count = 13 a ve form2 UvodniFormular.ListView1.Items.Count = 0?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

DataGridView1 na jednom formuláři není stejný jako DataGridView1 na jiném - jde o dva různé objekty. Neznám projekt, který vytváříte, nevím proč více formulářů, ale potvrzujete, že problém je v obsahu DataGridView1 - jak jej plníte, jste neuvedl.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jde o jeden stejný ListView ve Formuláři jedna a data z něj se ukládájí do textového souboru. V ListView mám 3 slupce - datum, číslo a text. Mám tam Form2, abych mohl zobrazit pložky z toho textového souboru do TextBoxu.

A myslím, že se cyklus For...Next vůbec neprovede, protože při ladění se přeskočí řádek

suma = suma + CDbl(ListView1.Items(i).SubItems(1).Text)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Není možné, aby ListView1 při čtení z prvního formuláře obsahoval položky a při čtení z druhého formuláře byl prázdný!

Zkoušel jste sečítat na obou formulářích. Proměnná "soucet2" na prvním formuláři, na kterém je ListView1 (tento Form máte pojmenovaný "UvodniFormular") musí po:

  ' na prvním Form:   
  Dim soucet2 As String = Me.ListView1.Items(i).SubItems(1).Text

obsahovat totéž při čtení z druhého formuláře:

  ' na druhém Form:     
  Dim soucet2 As String = UvodniFormular.ListView1.Items(i).SubItems(1).Text

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

suma = suma + CDbl(form1.ListView1.Items(i).SubItems(1).Text)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud přenášíte data z Form1 na Form2, tak proč k tomu potřebujete ukládat do textového souboru ?

Není to zbytečné ?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback