【问题标题】:WPF avoid adding a duplicate rowWPF 避免添加重复行
【发布时间】:2015-12-29 20:09:18
【问题描述】:

我正在使用 vb.net 框架 4.5 和 WPF 项目。

我有一个按钮,该功能将某个产品信息添加到数据网格。在我的 vb 代码文件中,我设置了一个产品类

Public Class MyProduct
    Public Property ItemNumber As String
    Public Property ItemDescription As String
    Public Property ItemUnitPrice As Double
    Public Property ItemQty As Integer
End Class

按钮触地事件

Private Sub Button_TouchDown(sender As Object, e As TouchEventArgs)

        Dim dmb As New MyProduct
        dmb.ItemNumber = "abc001"
        dmb.ItemDescription = "bla bla bla"
        dmb.ItemQty = 1
        dmb.ItemUnitPrice = 123.45

        MyDataGrid.Items.Add(dmb)

End Sub

目前,如果我多次点击此按钮,数据网格将为同一产品添加多个重复行。我的目标是当多个相同的产品添加到数据网格时,只显示一行,并且在同一个按钮上的每个额外的点击/单击操作只会增加 ItemQty 数量。

我该怎么做?谢谢!

【问题讨论】:

  • 听起来您的 DataGrid 实际上应该绑定到对产品进行分组的查询。您目前只是绑定到 ObservableCollection<MyProduct> 吗?
  • @LynnCrumbling,我只是绑定到每个列的名称。我不确定我是否正确理解了您的问题。我是 WPF 项目的新手。以下是我的 xaml 的代码。
  • 您可以考虑在您的项目中切换到使用 MVVM 模式。 WPF chat room 可能是学习方法的好地方。

标签: wpf vb.net datagrid


【解决方案1】:

首先,你需要防止插入两次:

Private Sub buttonAdd_Click(sender As Object, e As RoutedEventArgs) Handles buttonAdd.Click
    Dim dmb As New MyProduct
    dmb.ItemNumber = New Random().Next(5).ToString()
    dmb.ItemDescription = "bla bla bla"
    dmb.ItemQty = 1
    dmb.ItemUnitPrice = 123.45

    Dim dmbSearched As MyProduct = Nothing
    For Each dmbs As MyProduct In MyDataGrid.Items
        If dmbs.ItemNumber = dmb.ItemNumber Then
            dmbSearched = dmbs
            Exit For
        End If
    Next

    If dmbSearched Is Nothing Then
        MyDataGrid.Items.Add(dmb)
    Else
        dmbSearched.ItemQty += 1
    End If
End Sub

其次,当数量发生变化时,MyProduct 类必须引发事件,否则没有可见的变化:

Public Class MyProduct : Implements INotifyPropertyChanged
    Private Property m_ItemQty As Integer
    Public Property ItemQty As Integer
        Get
            Return m_ItemQty
        End Get
        Set(value As Integer)
            m_ItemQty = value
            FirePropertyChanged()
        End Set
    End Property
    Public Sub FirePropertyChanged(<CallerMemberName> Optional propName As String = "")
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
    End Sub
    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
    Public Property ItemNumber As String
    Public Property ItemDescription As String
    Public Property ItemUnitPrice As Double

End Class

问候

【讨论】:

    猜你喜欢
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    相关资源
    最近更新 更多