Jayanta Modak Ответов: 1

Получение ошибки при отображении данных в виде списка, пожалуйста, помогите мне.....


Получение ошибки при отображении данных в виде списка, пожалуйста, помогите мне.....
Ошибка : Невозможно добавить или вставить пункт "10-07-2018" более чем в одном месте. Вы
сначала необходимо удалить его из текущего местоположения или клонировать.
Имя параметра: пункт

Я использую Vb.net 2010 visual basic
sql server 2008 r2
хранимая процедура
один listview

Мне нужен такой тип структуры (пример)

id     date              item_name         qty.          amount
1      1/1/2019            a               2             10
                           B               1             12
                           x               14            100
                           zz              4             52

2      4/1/2019            M               5             80
                           N               4             50


Но когда я показываю данные 1-го элемента show on list view, то получаю ошибку.
Это возможно пожалуйста помогите мне

Что я уже пробовал:

With obj_S_J_RPT
    ListView1.Items.Clear()
    .Sdate = txtdtf.Text
    .EDate = txtdtt.Text
     dt1 = .GetStockJournalRPT()

    For i As Integer = 0 To dt1.Rows.Count - 1
        Dim dr As DataRow = dt1.Rows(i)

        Dim listitem As New ListViewItem(dr("SJDate").ToString())
        listitem.SubItems.Add(dr("itemnmsou").ToString())
        listitem.SubItems.Add(dr("SJqty").ToString())
        listitem.SubItems.Add(dr("SJPCS").ToString())
        listitem.SubItems.Add(dr("SJRate").ToString())
        listitem.SubItems.Add(dr("SJamt").ToString())
        listitem.SubItems.Add(dr("SJleft").ToString())
        listitem.SubItems.Add(dr("nrr").ToString())
        listitem.SubItems.Add(dr("SJID").ToString())

        Try
            With obj_S_J_RPT
                'ListView2.Items.Clear()
                .SJID = dr.Item(0)  'ListView1.Items(0).SubItems(8).Text
                dt2 = .GetStockJournalDetails() 'change

                For i1 As Integer = 0 To dt2.Rows.Count - 1
                    Dim dr1 As DataRow = dt2.Rows(i1)
                  Dim listitem_S As New
                   ListViewItem(dr1("itemnmDES").ToString())

                    listitem.SubItems.Add(dr1("itemnmDES").ToString())
                    listitem.SubItems.Add(dr1("SJdqty").ToString())
                    listitem.SubItems.Add(dr1("SJdPCS").ToString())
                    listitem.SubItems.Add(dr1("SJdRate").ToString())
                    listitem.SubItems.Add(dr1("SJdamt").ToString())
                    listitem.SubItems.Add(dr1("SJDstock").ToString())
                    listitem.SubItems.Add(dr1("SJid").ToString())
                    ListView1.Items.Add(listitem)

                Next i1
            End With
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
        End Try

        ListView1.Items.Add(listitem)
    Next
End With

1 Ответов

Рейтинг:
0

RickZeeland

Вы не можете добавить элемент с одним и тем же ключом несколько раз, что вы делаете в строке:

Dim listitem As New ListViewItem(dr("SJDate").ToString())
Вместо этого попробуйте использовать уникальное поле, например поле SJID, или комбинацию уникальных полей.
Также попробуйте поймать ошибку до того, как она произойдет с помощью:
ListView1.Items.ContainsKey(listitem.Name)
Смотрите пример в C# здесь: https://www.c-sharpcorner.com/article/how-do-i-check-for-duplicate-items-in-a-listview/[^]
Ибо VB.NET это было бы ... :
If Not listView1.Items.ContainsKey(listitem.Name) Then
    listView1.Items.Add(listitem)
Else
    MessageBox.Show("Duplicate Item!")
End If

Вы можете использовать этот онлайн конвертер для преобразования C# в VB.NET: Преобразователь кода C# в VB и VB в C# – Telerik[^]

В вашем цикле FOR вам нужно изменить listitem на listitem_S:
Dim listitem_S As New ListViewItem(dr1("itemnmDES").ToString())
                    listitem.SubItems.Add(dr1("itemnmDES").ToString())
                    listitem.SubItems.Add(dr1("SJdqty").ToString())
                    listitem.SubItems.Add(dr1("SJdPCS").ToString())
                    listitem.SubItems.Add(dr1("SJdRate").ToString())
                    listitem.SubItems.Add(dr1("SJdamt").ToString())
                    listitem.SubItems.Add(dr1("SJDstock").ToString())
                    listitem.SubItems.Add(dr1("SJid").ToString())
                    ListView1.Items.Add(listitem)


Jayanta Modak

спасибо сэр за ответ
но как я могу использовать этот код ваша ссылка "с" я не знаю "с" Пожалуйста, помогите мне...

RickZeeland

Смотрите обновленное решение :)

Jayanta Modak

Простите, сэр, у него это не получилось
показать ту же ошибку

RickZeeland

Вы изменили строки с помощью ListView1?Предметы.Добавить(listitem) ?
Я вижу, у вас есть две из этих строк ...

Jayanta Modak

Да, сэр, ошибка, показывающая, когда цикл запускается 2-й раз при отладке этой строки ----

ListView1.Items.Add(listitem)

или
If Not listView1.Items.ContainsKey(listitem.Name) Then
    listView1.Items.Add(listitem)
Else
    MessageBox.Show("Duplicate Item!")
End If