Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[VB 2005] Zoekfunctie datagridview

Pagina: 1
Acties:
  • 145 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben al langere tijd bezig met het maken van een zoekfunctie in een datagridview.

Ik heb dus een datagridview die gevuld is op basic van een datasource (bindingsource). Nu wil ik door de data heengaan aan de hand van de zoekfunctie.

Wanneer ik dus invul wat er gezocht moet worden, moet er gekeken worden in ALLE records en in ALLE columns van de data. Ik wil dus echt in alle velden zoeken. Wanneer ik dan verder zou zoeken zou 'hij' naar het volgende resultaat kunnen gaan.

Ik ben al een tijdje bezig met de bindingsource.find e.d. en heb al heel wat gezocht op google, GoT en andere VB fora maar kom er gewoon niet uit. Is er iemand die kan zeggen hoe ik dit aan kan pakken?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Als je een BindingSource gebruikt zou ik de Find method gebruiken en dan de DataPropertyName van elke kolom in je DataGridView pakken.
Ongeveer als zo (even C# want mijn VB is nogal roestig):
C#:
1
2
3
4
5
6
List<int> matches = new List<int>();
BindingSource bindingSource = new BindingSource(dataSet1, null);

foreach(DataGridViewColumn column in dataGridView.Columns) {
    matches.Add(matches.Find(column.DataProperyName, findString);
}

Probleem is alleen dat dit maar 1 match teruggeeft en alleen de exacte match.

Nu met Land Rover Series 3 en Defender 90


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 28-11 11:15

sopsop

[v] [;,,;] [v]

Ik denk dat je zolang je met alleen maar boundfield columns werkt je met de datasource uit de voeten moet kunnen. Zodra je mutaties gaat uitvoeren op je bound-data d.m.v. template columns wordt het een stuk lastiger.

Je zou in dat geval gebruik kunnen maken van het OnRowCreated-event (wel met allow-paging = "false"). Handig is iig anders.

oei. Ik ben er even vanuit gegaan dat je een asp.net gridview bedoelde. Of een windows-app gridview ook zo werkt weet ik niet...

[ Voor 16% gewijzigd door sopsop op 21-08-2007 08:50 ]


Verwijderd

Topicstarter
Ik heb het inmiddels opgelost. Even ter info:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
If e.KeyCode = Keys.F3 Then
            Call searchInDataGridView(Me.DataGridView1)
End If
End Sub

Public Function searchInDataGridView(ByVal datagrid As DataGridView)

        Dim searchText As String
        Dim regExp As Regex
        Dim regExpMatch As Match
        Dim regEx1 As String
        Dim regEx2 As String
        Dim regEx3 As String

        searchText = InputBox("Zoeken op: ", "Zoeken in data.")

        If searchText = "" Then Exit Function

        regEx1 = "(?<one>.*)"
        regEx2 = "(?<two>" & searchText.ToUpper & ")"
        regEx3 = "(?<three>.*)"
        regExp = New Regex(regEx1 & regEx2 & regEx3)

        Dim x As Integer = 0

        While x < datagrid.Rows.Count
            Dim y As Integer = 0
            While y < datagrid.Rows(x).Cells.Count
                Dim c As DataGridViewCell = datagrid.Rows(x).Cells(y)
                If Not (c.Value Is DBNull.Value Or c.Value Is Nothing) Then
                    If CType(c.Value, String) <> "" Then
                        regExpMatch = regExp.Match((CType(c.Value, String).ToUpper))
                        If regExpMatch.Success Then
                            'If CType(c.Value, String).ToUpper = searchText.ToUpper Then
                            datagrid.Rows(x).Cells(y).Selected = True
                            datagrid.CurrentCell = datagrid.Rows(x).Cells(y)
                            If MsgBox("Gevonden. Volgende?", MsgBoxStyle.OkCancel) =             MsgBoxResult.Cancel Then Exit Function
                            'End If
                        End If
                    End If
                End If
                System.Math.Min(System.Threading.Interlocked.Increment(y), y - 1)
            End While
            System.Math.Min(System.Threading.Interlocked.Increment(x), x - 1)
        End While

        MsgBox("Zoeken voltooid!")

    End Function

[ Voor 3% gewijzigd door Verwijderd op 24-08-2007 09:39 ]