字符串列表中的Vb.net bindingsource.filter

时间:2019-07-28 19:10:28

标签: vb.net bindingsource

我在windows.form中有一个组合框和一个datagridview, 我用一个按钮在datagridview中添加行,并从组合框中获取值(字符串),如果我双击datagridview的行,则删除该行。

当我添加行时,我想隐藏/禁用/删除组合框值,而当我删除行时,我想在组合框中恢复它。

组合框值是从数据集源绑定的,组合框是下拉列表样式。

直到现在我都尝试一些事情,但这是我认为更好的方法,也是我的位置:

Dim filterList As List(Of String) = New List(Of String)

Private Sub filterListAdd()

        Dim dgResult As String
        filterList .Clear() 'Clear the list so no duplicates

        For i As Integer = 0 To combobox.Items.Count - 1
            Dim a As String = combobox.GetItemText(combobox.Items(i))

            For row As Integer = 0 To Dgview.RowCount - 1
                For col As Integer = 0 To Dgview.ColumnCount - 1
                Next
                Surname = Dgview.Rows(row).Cells(0).Value.ToString
                If dgResult = a Then 
                    filterList .Add(a) 'Add to list
                End If
            Next
        Next i

    End Sub   

Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button.Click

Dgview.Rows.Add(combobox.Text)
filterListAdd()

'Here i want to bindingsource.filter = filterList 

End Sub

Private Sub Dgview_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles Dgview.MouseDoubleClick

Dgview.Rows.Remove(Dgview.CurrentRow)

'I Guess here with the same way i filter it again

End Sub

感谢您的帮助,谢谢。

Panos

1 个答案:

答案 0 :(得分:0)

Public Class Form1

Dim clsItems As New ArrayList()

Private Sub RemoveComboItem()

Me.BindingSource.Position = Me.BindingSource.Find("1", Combobox.Text)
Dim 1Add As String = DirectCast(BindingSource.Current, DataRowView).Item("1").ToString
Dim 2Add As String = DirectCast(BindingSource.Current, DataRowView).Item("2").ToString
Dim 3Add As String = DirectCast(BindingSource.Current, DataRowView).Item("3").ToString

      clsItems.Add(New MyItem(1Add, 2Add, 3Add))

      BindingSource.RemoveCurrent()

  End Sub

Private Sub AddComboItem(dg As DataGridView) ' Because i have two datagridviews

      Dim 1 As String = dg.CurrentRow.Cells(0).Value.ToString()

      For i = 0 To clsItems.Count - 1
          If i <= clsItems.Count - 1 Then
              If 1 = clsItems(i).1 Then
                  Dim drNewRow As DataRow
                  drNewRow = DeeDataSet.Tables("Table").NewRow()
                  drNewRow("1") = clsItems(i).1
                  drNewRow("2") = clsItems(i).2
                  drNewRow("3") = clsItems(i).3
                  DeeDataSet.Tables("Table").Rows.Add(drNewRow)
                  clsItems.Remove(clsItems(i)) ' Remove it from array so no duplicates
              End If
          End If
      Next

  End Sub

Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button.Click

RemoveComboItem()

End Sub

Private Sub Dgview_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles Dgview.MouseDoubleClick

AddComboItem(Dgview)
Dgview.Rows.Remove(Dgview.CurrentRow)

End Sub

End class

Public Class MyItem

  Private m_s1 As String
  Private m_s2 As String
  Private m_s3 As String

  Public Sub New(1As String, 2 As String, 3 As String)

      M_sName = 1
      M_sSurname = 2
      M_sTitle = 3

  End Sub

  Public ReadOnly Property 1

      Get
          Return m_s1
      End Get

  End Property

  Public ReadOnly Property 2

      Get
          Return M_s2
      End Get

  End Property

  Public ReadOnly Property 3

      Get
          Return M_s3
      End Get

  End Property

End Class

在这种形式下,我不会更新数据集,因为每次更改都希望以其他形式进行更改,因此当我从此处完成后,dataset.table不会更改。