Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
1

Данные в ListView вносятся два раза (получается 2 строки одинаковых данных)

03.11.2016, 14:58. Показов 1359. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Public Class Form1
    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        TextBox1.Text = WebBrowser1.Document.Body.InnerText
 
        '-------------------------Алгебра-------------------------'
 
        Dim a As Integer
        Dim b, c, d, d1, f As String
        a = TextBox1.Lines.Count - 1
        For x = 0 To a Step 1
            If TextBox1.Lines(x) = "Предметы" Then
                b = TextBox1.Lines(x + 4)
                c = Replace(b, "+", "")
                d = Replace(c, "H", "")
                d1 = Replace(d, " ", "")
            End If
        Next
        '--------Среднее значение---------'
        Dim aa, ss, Ost, Prov As Long, SRZN As Double
        aa = d ' Вводим исходное число в текстовое поле на форме. 
        ss = 0
        Do
            Ost = aa - Int(aa / 10) * 10 ' Вычисляем очередную цифру как остаток от деления на 10. 
            If Ost > 0 Then ss = ss + Ost Else Exit Do ' Прибавляем остаток к сумме. 
            aa = Int(aa / 10) ' Отбрасываем последнюю цифру. 
        Loop
        SRZN = ss / Len(d1)
        Algebra.Text = d1
 
    End Sub
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        WebBrowser1.ScriptErrorsSuppressed = True
        WebBrowser1.Navigate(adress.Text)
    End Sub
 
    Private Sub WebBrowser1_ProgressChanged(sender As Object, e As WebBrowserProgressChangedEventArgs) Handles WebBrowser1.ProgressChanged
        Try
            ProgressBar1.Value = CType((e.CurrentProgress / e.MaximumProgress * 100), Integer)
        Catch Ex As Exception
        End Try
        If ProgressBar1.Value = 100 Then
            Label3.Text = "Успешно!"
        End If
    End Sub
End Class

Что сделать, чтобы данные вносились 1 раз(на одну строчку). Эта форма выводится по нажатию на кнопку войти на другой форме
Миниатюры
Данные в ListView вносятся два раза (получается 2 строки одинаковых данных)  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2016, 14:58
Ответы с готовыми решениями:

Данные не вносятся в базу данных MySQL
Данные не вносятся в базу данных MySQL в чем проблема не пойму, вроде все правильно. Я использовал...

В базу данных вносятся данные,а на страничке отображаются только как двоиточие
Добрый вечер! Осталась самая малость и такая проблема, создал гостевую страничку в ней надписи...

Не получается два раза вызвать функцию
Добрый день Жалуется на $_SESSION = total_item($_SESSION); в add_cart Fatal error: Uncaught...

В постраничной навигации для ListView на ссылку страницы надо нажимать два раза
Создал вывод картинок через ListView. Сделал постраничную навигацию, но что бы перейти на другую...

28
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
03.11.2016, 15:22  [ТС] 2
И можно ли как то улучшить код?
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
03.11.2016, 16:13 3
Цитата Сообщение от MaxBatya Посмотреть сообщение
Что сделать, чтобы данные вносились 1 раз
Из вашего кода не видно, как данные вносятся в ListView
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
03.11.2016, 17:36  [ТС] 4
Забыл дописать. Вот что должно быть:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Public Class Form1
    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        TextBox1.Text = WebBrowser1.Document.Body.InnerText
 
        '-------------------------Алгебра-------------------------'
 
        Dim a As Integer
        Dim b, c, d, d1, f As String
        a = TextBox1.Lines.Count - 1
        For x = 0 To a Step 1
            If TextBox1.Lines(x) = "Предметы" Then
                b = TextBox1.Lines(x + 4)
                c = Replace(b, "+", "")
                d = Replace(c, "H", "")
                d1 = Replace(d, " ", "")
            End If
        Next
        '--------Среднее значение---------'
        Dim aa, ss, Ost, Prov As Long, SRZN As Double
        aa = d ' Вводим исходное число в текстовое поле на форме. 
        ss = 0
        Do
            Ost = aa - Int(aa / 10) * 10 ' Вычисляем очередную цифру как остаток от деления на 10. 
            If Ost > 0 Then ss = ss + Ost Else Exit Do ' Прибавляем остаток к сумме. 
            aa = Int(aa / 10) ' Отбрасываем последнюю цифру. 
        Loop
        SRZN = ss / Len(d1)
        Algebra.Text = d1
 
        Dim item As New ListViewItem("Алгебра")
        item.SubItems.Add(d1)
        item.SubItems.Add(Math.Round(SRZN, 2))
        ListView1.Items.Add(item)
 
        '-------------------------Английский язык-------------------------'
 
        Dim a1 As Integer
        Dim b1, c1, d2, f1 As String
        a1 = TextBox1.Lines.Count - 1
        For x = 0 To a Step 1
            If TextBox1.Lines(x) = "Предметы" Then
                b1 = TextBox1.Lines(x + 5)
                c1 = Replace(b1, "+", "")
                d2 = Replace(c1, "H", "")
                f1 = "Английский язык: " & Replace(d2, " ", "")
                Label2.Text = f1 & " " & Len(f1)
            End If
        Next
    End Sub
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        WebBrowser1.ScriptErrorsSuppressed = True
        WebBrowser1.Navigate(adress.Text)
    End Sub
 
    Private Sub WebBrowser1_ProgressChanged(sender As Object, e As WebBrowserProgressChangedEventArgs) Handles WebBrowser1.ProgressChanged
        Try
            ProgressBar1.Value = CType((e.CurrentProgress / e.MaximumProgress * 100), Integer)
        Catch Ex As Exception
        End Try
        If ProgressBar1.Value = 100 Then
            Label3.Text = "Успешно!"
        End If
    End Sub
End Class
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
03.11.2016, 18:11 5
Такое может происходить когда на странице используются сценарии JavaScript. Т.е. событие DocumentCompleted
возникает несколько раз.
Что делать.
Вынесите код заполнения ListView из события DocumentCompleted
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
03.11.2016, 18:42  [ТС] 6
а куда, и так чтобы оно само срабатывало после открытия формы и загрузки данных? Чтобы без кнопок.
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
04.11.2016, 17:21 7
Значит, нужно дожидаться полной загрузки страницы, а уже затем заносить данные в ListView.
Были такие темы, вот, например.

Добавлено через 5 минут
Попробуйте класс WebRequest, может будет его достаточно, и не надо тогда WebBrowser.
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
04.11.2016, 18:55  [ТС] 8
А можно по подробнее по поводу WebRequest, как это осуществить в коде?
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
04.11.2016, 20:38 9
Вот, поэкспериментируйте
VB.NET
1
2
3
4
5
6
7
8
9
Imports System.IO
Imports System.Net
...
        Dim request As WebRequest = WebRequest.Create("https://www.cyberforum.ru/vb-net/")
        Dim response As WebResponse = request.GetResponse()
        Dim responseStream As Stream = response.GetResponseStream()
        Dim reader As StreamReader = New StreamReader(responseStream)
        My.Computer.FileSystem.WriteAllText("c:\test.txt", reader.ReadToEnd, False)
        response.Close()
Этот код получает ответ от сервера и сохраняет его в файл. Посмотрите, все ли там есть, что вам нужно.
Если все, парсите любым способом (таких тем здесь полно) и выводите в листвью.
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
05.11.2016, 11:58  [ТС] 10
Мне нужно чтобы в текстовый документ выводились строчки с текстом, а не весь код HTML. Или я что-то не понимаю?
0
8941 / 4853 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
05.11.2016, 12:14 11
Цитата Сообщение от MaxBatya Посмотреть сообщение
VB.NET
1
Ost = aa - Int(aa / 10) * 10 ' Вычисляем очередную цифру как остаток от деления на 10.
Остаток от деления вычисляется проще:
VB.NET
1
Ost = aa Mod 10
1
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
06.11.2016, 13:52 12
Цитата Сообщение от MaxBatya Посмотреть сообщение
Мне нужно чтобы в текстовый документ выводились строчки с текстом, а не весь код HTML
Я же вам написал,
Цитата Сообщение от MrCrown Посмотреть сообщение
парсите любым способом
Например, с помощью HtmlAgilityPack
Ну, или если вам кажутся сложными предложенные варианты, могу подсказать еще один:
Выводите данные в список не допускающий повторений, а из него в ListView.

Добавлено через 14 минут
Как то так примерно:
VB.NET
1
2
3
4
5
6
7
8
Dim hash As New HashSet(Of ListViewItem)
        ' ' '
        Dim item As New ListViewItem("Алгебра")
        item.SubItems.Add(d1)
        item.SubItems.Add(Math.Round(SRZN, 2))
        hash.Add(item)
        ' ' '
        ListView1.Items.AddRange(hash.ToArray)
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
07.11.2016, 12:38  [ТС] 13
Всеравно дублируется...
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
07.11.2016, 12:43 14
Выложите проект
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
07.11.2016, 14:29  [ТС] 15
Вот, только ссылка не будет работать так как нужна авторизация на сайте
Вложения
Тип файла: rar WindowsApplication2.rar (149.1 Кб, 1 просмотров)
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
07.11.2016, 14:34  [ТС] 16
Немного не то кинул, вот
Вложения
Тип файла: rar WindowsApplication2.rar (149.3 Кб, 2 просмотров)
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
07.11.2016, 16:14 17
Без ссылки ничего проверить не смогу.
Переменную hash объявите на уровне класса формы.
VB.NET
1
2
3
Public Class Form1
    Dim hash As New HashSet(Of ListViewItem)
    ' ' '
Строку
VB.NET
1
ListView1.Items.AddRange(hash.ToArray)
перенесите в конец процедуры WebBrowser1_DocumentCompleted.
Перед ней добавьте
VB.NET
1
ListView1.Items.Clear()
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
07.11.2016, 17:19  [ТС] 18
Всеравно дублируется, вот ссылка: http://petersburgedu.ru/dnevni... 9&period=0
0
0 / 0 / 0
Регистрация: 31.10.2016
Сообщений: 122
07.11.2016, 17:20  [ТС] 19
И программа
Вложения
Тип файла: rar WindowsApplication2.rar (149.2 Кб, 3 просмотров)
0
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
08.11.2016, 10:58 20
Лучший ответ Сообщение было отмечено MaxBatya как решение

Решение

Эта ссылка бесполезна, потому что данные приложение, как я понял, получает из твоего
аккаунта, а он, в свою очередь, - с сайта школы.
Придется гадать на кофейной гуще.
Попробуй так: верни свой старый код (удали HashSet), и в начале WebBrowser1_DocumentCompleted
напиши
VB.NET
1
ListView1.Items.Clear()
По идее, в ListView должно попасть только то, что получено браузером при последней загрузке.
(Если дело в этом). Проверь, сколько раз срабатывает DocumentCompleted (поставь туда счетчик),
посмотри, что находится в документе...
1
08.11.2016, 10:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2016, 10:58
Помогаю со студенческими работами здесь

Событие OnData у Virtual ListView вызывается два раза для одного Item'a
Тестил работу процедуры OnData у виртуального ListView и при отладке заметил такое, что событие...

Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза.
С++. Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два...

Не получается отобразить данные в ListView, используя Binding.
Не получается отобразить данные в ListView, используя Binding. Создал CompanyPage. Туда прописал:...

В отчете некоторые данные отображаются по два раза
В отчете некоторые данные отображаются по два раза, как это исправить: БД: Отчет построен на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru