Vylepšený DataGridView   otázka

VB.NET

Prosím, nemá někdo nebo neporadí kde sehnat. Potřeboval bych prvek pro aplikaci ve VB.NET, který se chová analogicky jako DataGridView, ale obsahuje v sobě i řádek pro vyhledávání a zadávání logických podmínek pro vyhledávání. Zkoušel jsem AdvancedDGW, ale ten se podobá spíše Excelu a není to ono.

Snad to popíšu dobře, prvek bývá v profi programech, pod hlavičkou má prázdný řádek, kam se dají vepsat slova/hodnoty pro vyhledávání a nastavit jejich logické vztahy. DGW pak vyfiltruje záznamy podle požadovaného zadání, nevím jestli automaticky nebo kódem, ale to je jedno, s tím si už poradím.

Děkuji za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A nebylo by lepší položky i filtrovat?

Public Class Form1
 
    Dim lv As DataListView, dt As DataTable
    Dim tb As TextBox, cb As ComboBox
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        lv = New DataListView
        tb = New TextBox
        cb = New ComboBox
        cb.DropDownStyle = ComboBoxStyle.DropDown
        Dim pnl As Panel = New Panel
        With pnl
            .Controls.Add(cb)
            .Controls.Add(tb)
            tb.Left = cb.Width
            .Height = tb.Height
        End With
 
        Me.Controls.Add(lv)
        lv.Location = New System.Drawing.Point(0, pnl.Height)
        lv.Dock = DockStyle.Fill
        Me.Controls.Add(pnl)
        pnl.Dock = DockStyle.Top
        AddHandler cb.SelectedIndexChanged, New EventHandler(AddressOf cb_SelectedIndexChanged)
        AddHandler tb.TextChanged, New EventHandler(AddressOf tb_TextChanged)
 
        dt = New DataTable
        dt.Columns.Add("Jméno")
        dt.Columns.Add("Příjmení")
 
        dt.Rows.Add("Honza", "Dufek")
        dt.Rows.Add("Pavel", "Dufek")
        dt.Rows.Add("Jan", "Hlávka")
        dt.Rows.Add("Milan", "Dufek")
        dt.Rows.Add("Jan", "Duffon")
        dt.Rows.Add("Pavel", "Hlávka")
        dt.Rows.Add("Ondřej", "Linhart")
        dt.Rows.Add("Mirek", "Linhart")
 
        lv.SetDataSource(dt)
 
        For Each c As DataColumn In dt.Columns
            lv.Columns.Add(c.Caption)
            cb.Items.Add(New String(c.Caption))
        Next
 
        cb.SelectedIndex = 0
    End Sub
 
    Private Sub cb_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        tb.Clear()
    End Sub
 
    Private Sub tb_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If tb.Text = vbNullString Then
            lv.SetDataSource(dt)
        Else
            Dim tbFilter As New DataTable
            tbFilter = dt.Clone
            Dim flt As String
            flt = cb.Text & " Like '" & tb.Text & "%'"
            Dim dr() As DataRow = dt.Select(flt)
            For i As Integer = 0 To dr.Length - 1
                tbFilter.ImportRow(dr(i))
            Next
            lv.SetDataSource(tbFilter)
        End If
    End Sub
End Class
 
Public Class DataListView
    Inherits ListView
 
    Public Sub SetDataSource(ByVal fromDataTable As DataTable)
        Me.Items.Clear()
 
        For i As Integer = 0 To fromDataTable.Rows.Count - 1
            Dim lvItem As ListViewItem
            lvItem = Me.Items.Add(fromDataTable.Rows(i).Item(0).ToString)
            For j As Integer = 1 To fromDataTable.Columns.Count - 1
                lvItem.SubItems.Add(fromDataTable.Rows(i).Item(j).ToString)
            Next j
        Next i
 
    End Sub
 
    Public Sub New()
        Me.View = Windows.Forms.View.Details
        Me.HideSelection = False
        Me.GridLines = True
    End Sub
End Class
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nezkoušel jsem , ale snad je link ještě funkční...

Poděděný sloupec DataGridViewColumn zobrazoval listbox, který vybral jedinečné hodnoty dle formátu sloupce a poskytoval autofilter.

Vlastní filter ani požadovaná lišta s textboxem na hledání, ale v příkladu není a musíte si jí dodělat.

Building a Drop-Down Filter List for a DataGridView Column Header Cell Sample Code

https://www.microsoft.com/en-us/download...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tady ještě jeden příklad pro listview i datagridview :

https://www.dotnetportal.cz/forum/tema/1...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback