Izzy Decorte Ответов: 2

Как отфильтровать свой пользовательский набор данных для определенных слов, таких как имя в VB.NET


В моей форме у меня есть 3 текстовых поля, в которые я хочу иметь возможность вводить данные, нажмите enter, и он должен искать слово
textbox1 = имя или фамилия
textbox2 = researchtype
textbox3 = diagnosetype.

набор данных загружается, когда я открываю форму
это код для этой части:

Public Class Dossiers
    Private Sub Dossiers_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\GoogleDrive\EINDWERK VBNET\PatientenDatabase.accdb"
        Dim con As New OleDbConnection(str)
        Dim com As String = "Select          tbl_Dossiers.Dos_ID, tbl_Relaties.Rel_Naam, tbl_Relaties.Rel_Voornaam, tbl_Onderzoekstypes.OZ_TypeOnderzoek, tbl_Diagnoses.Diag_Type
                               FROM((((tbl_Dossiers 
                               Left OUTER JOIN tbl_DossRelatie ON tbl_Dossiers.Dos_ID = tbl_DossRelatie.DR_DossID) 
                               Left OUTER JOIN tbl_Relaties ON tbl_DossRelatie.DR_RelID = tbl_Relaties.Rel_ID) 
                               Left OUTER JOIN tbl_OnderzoeksTypes ON tbl_Dossiers.OZ_ID = tbl_OnderzoeksTypes.OZ_ID) 
                               Left OUTER JOIN tbl_Diagnoses ON tbl_Dossiers.Diag_ID = tbl_Diagnoses.Diag_ID)
                               ORDER BY        tbl_Dossiers.Dos_ID"
        Dim adpt As New OleDbDataAdapter(com, con)
        Dim dossierset As New DataSet()
        adpt.Fill(dossierset, "Dos_ID")
        dgvDossiers.DataSource = dossierset.Tables(0)
        dgvDossiers.Show()

    End Sub



До сих пор я пробовал 2 подхода, и google говорит мне примерно то же самое...:

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

Private Sub Pat_VoornaamTextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles Pat_VoornaamTextBox.KeyDown
    If e.KeyCode = Keys.Enter Then
        Dim dv As DataView
        dv = New DataView(Dossierset.Tables(0), "Rel_Naam= '" & Me.Pat_VoornaamTextBox.Text & "' ", "Rel_Naam", DataViewRowState.CurrentRows)
        Me.DGVDossiers.DataSource = dv
    End If
End Sub


'Try
'bindingsourceDossier.Filter = "Rel_Naam like '" & Pat_VoornaamTextBox.Text & "%'" &
'        " OR Rel_Voornaam like '" & Pat_VoornaamTextBox.Text & "%'"
'Catch ex As Exception
' MessageBox.Show("Er is een fout opgetreden: " & ex.Message.ToString(),
'                    "Zoek Relatie", MessageBoxButtons.OK, MessageBoxIcon.Error)
'End Try

2 Ответов

Рейтинг:
1

RickZeeland

Небольшой пример, адаптированный из https://www.dotnetperls.com/dataset-vbnet[^]

Public Class Form1
    Public Sub New()
        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        Module1.Main()
        Me.DataGridView1.DataSource = set1.Tables(0)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        set1.Tables(0).DefaultView.RowFilter = "name = 'sam'"
        Me.DataGridView1.DataSource = set1.Tables(0)
    End Sub
End Class

Module Module1
    Public table1 As DataTable = New DataTable("patients")
    Public table2 As DataTable = New DataTable("medications")
    Public set1 As DataSet = New DataSet("office")

    Sub Main()
        ' Two DataTables.
        table1.Columns.Add("name")
        table1.Columns.Add("id")
        table1.Rows.Add("sam", 1)
        table1.Rows.Add("mark", 2)

        table2.Columns.Add("id")
        table2.Columns.Add("medication")
        table2.Rows.Add(1, "atenolol")
        table2.Rows.Add(2, "amoxicillin")

        ' Create a DataSet. Put both tables in it.
        set1.Tables.Add(table1)
        set1.Tables.Add(table2)

        ' Visualize DataSet.
        Debug.WriteLine(set1.GetXml())
    End Sub
End Module


Izzy Decorte

Эй, Рик, пример кода, который ты сделал, работает, но, похоже, я недостаточно умен, чтобы реализовать его в своем существующем коде. Я пытался целый день, но безрезультатно.

RickZeeland

Ну что ж, мудрость приходит с возрастом :)

Izzy Decorte

спасибо за Ваш вклад

Рейтинг:
0

RickZeeland

Попробовать это:

If e.KeyCode = Keys.Enter Then
  Dim table = Dossierset.Tables(0)
  table.DefaultView.RowFilter = "Rel_Naam= '" & Me.Pat_VoornaamTextBox.Text & "'"
  Me.DGVDossiers.DataSource = table
End If

Вероятно, вам также нужно объявить таблицу как общедоступную переменную.


Izzy Decorte

Привет Рик,
Кажется, это не работает.
Private Sub Pat_VoornaamTextBox_KeyDown(отправитель как объект, e Как KeyEventArgs) обрабатывает Pat_VoornaamTextBox.KeyDown
Если e.KeyCode = ключи.Тогда Войдите
Dim Dossierset Как Новый Набор Данных()
Тусклая таблица = досье.Таблицы(0)
стол.DefaultView.RowFilter = "Rel_Naam= '" & Me.Pat_VoornaamTextBox.Текст & "'"
Меня.DGVDossiers.Источник данных dataSource = таблица
Конец, Если
Конец Подводной Лодки
это то, что я сделал, но я получаю ошибки
Я думаю, что мне нужен какой-то источник привязки?

RickZeeland

Я попробую здесь, но мои навыки VB очень ржавые :)

RickZeeland

А вы пробовали решение 2 ? он должен работать даже без bindingsource.