Этот вопрос строго связан с предыдущим:
Отображение изображений в столбце DataGridView с использованием объектов JSON в качестве источника данных
Вы используете подкласс (Result
) из RootObject
для заполнения первого DataGridView.
Изменить класс Result
следующим образом:
- Добавить новое свойство,
Selected As Boolean
, украшенное атрибутом <JsonIgnore>
.
- Добавьте сюда новый подкласс, называемый
SelectionResult
, набор свойств класса Result
, которые, по вашему мнению, необходимы во втором DataGridView для отображения выбранные товары.
- Добавить метод копирования в класс
Result
, который возвращает подраздел в качестве объекта SelectionResult
.
Public Class Result
<JsonIgnore>
Public Property Selected As Boolean
'(...)
Public Function GetSelectionResult() As SelectionResult
Return New SelectionResult With {
.ID = Me.id,
.Image = Me.Image,
.Name = Me.Name,
.ProductDescription = Me.ProductDescription,
.Department = Me.Department,
.Price = Me.Price,
.Unitprice = Me.Unitprice
}
End Function
End Class
Public Class SelectionResult
Public Property ID As Integer
Public Property Image As Bitmap
Public Property Name As String
Public Property ProductDescription As String
Public Property Department As String
Public Property Price As Decimal
Public Property Unitprice As Decimal
End Class
- Добавьте два
List(Of Class)
как поля в форме. Основной класс в предыдущем вопросе назывался ProductsQuery
, поэтому я повторно использую уже определенные здесь имена:
Private CurrentProducts As List(Of ProductsQuery.Result) = New List(Of ProductsQuery.Result)()
Private SelectedProducts As List(Of ProductsQuery.SelectionResult) = New List(Of ProductsQuery.SelectionResult)()
В методе, который заполняет первый DataGridView, инициализируйте CurrentProducts
Список:
CurrentProducts = New List(Of ProductsQuery.Result)()
После десериализации JSON заполните список результатами JSON:
CurrentProducts.AddRange(JsonPost.uk.ghs.Products.Results)
В обработчике события Button, который добавляет выбранные продукты во второй DataGridView, вставьте этот код:
Редактировать
Список SelectedProducts
сохраняет элементы, выбранные в первом DataGridView: к элементу добавляются только элементы, которых еще нет в списке CurrentProducts
.
Кнопка btnRemoveSelection
удаляет выбранные элементы во втором DataGridView из списка SelectedProducts
. Выбор строки DataGridView несколько громоздок, поэтому может потребоваться добавить столбец CheckBox, чтобы упростить выбор элементов для удаления.
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
SelectedProducts.AddRange(CurrentProducts.
Where(Function(p) p.Selected = True AndAlso
(Not SelectedProducts.Any(Function(sp) sp.ID = p.id))).
Select(Function(p) p.GetSelectionResult()).ToArray())
ResetCart()
End Sub
Private Sub btnRemoveSelection_Click(sender As Object, e As EventArgs) Handles btnRemoveSelection.Click
If DataGridView2.SelectedRows.Count = 0 Then Return
Dim itemsRemoved As Boolean = False
Dim selectedItems() As Integer = DataGridView2.SelectedRows.
OfType(Of DataGridViewRow)().
Select(Function(r) CInt(r.Cells("ID").Value)).ToArray()
For Each ID As Integer In selectedItems
Dim currentIndex As Integer = SelectedProducts.FindIndex(Function(p) p.ID = ID)
If currentIndex >= 0 Then
SelectedProducts.RemoveAt(currentIndex)
itemsRemoved = True
End If
Next
If itemsRemoved Then
ResetCart()
End If
End Sub
Private Sub ResetCart()
DataGridView2.DataSource = Nothing
DataGridView2.DataSource = SelectedProducts
DataGridView2.Columns(0).Visible = False
DataGridView2.AutoResizeRows()
End Sub
Это заполняет List(Of SelectedProducs)
выбранными элементами первого DataGridView и устанавливает DataSource второго DataGridView в этот список.
Обратите внимание, что для первого столбца объекта DataGridView установлено значение Visible = False
, поскольку этот столбец соответствует свойству ID
выбранного элемента
GetSelectionResult()
класса Result
возвращает значения свойств, которые были определены в классе SelectionResult
. Конечно, вы можете переопределить этот класс, чтобы он содержал любые свойства, которые вы считаете подходящими.
Это результат следующих модификаций: