DataGridView filtern von Zeilen basierend auf einem Wert
Arbeite ich an ein windows-Formular in vs2013.Ich versuche zum anzeigen der Datensätze basiert auf einem Variablen an DataGridView, wenn mein Formular geladen wird. Ich habe versucht, eine ganze Reihe von code basierend auf einigen google-Recherchen.
Ich bin connect-Formular Daten in eine access-Datenbank.
Hier ist der code:
Dim maxrecords As Integer
Dim firstrecord As Integer
Dim currentrecord As Integer
Dim deletedrecordnum As Integer
Dim con As New OleDb.OleDbConnection
Dim del As New OleDb.OleDbConnection
Dim dbprov As String
Dim dbsource As String
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim dsDelete As New DataSet
Dim daDelete As OleDb.OleDbDataAdapter
Dim sql As String
Dim sqlDelete As String
Dim currentday As String
'This is the first thing that happens before the form loads up on the screen
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dbprov = "Provider = Microsoft.ACE.OLEDB.12.0;"
dbsource = "Data Source = C:\VB_Projects\database1.accdb"
sql = "SELECT * FROM T_Cutdata"
sqlDelete = "SELECT * FROM T_DeletedData"
con.ConnectionString = dbprov & dbsource
con.Open()
MsgBox("Open")
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "lawncutdata")
daDelete = New OleDb.OleDbDataAdapter(sqlDelete, con)
daDelete.Fill(dsDelete, "lawncutdata")
con.Close()
MsgBox("Closed")
If IsDBNull(ds.Tables("lawncutdata").Rows(0).Item(3)) Then
CheckBox1.Checked = False
Else
CheckBox1.Checked = ds.Tables("lawncutdata").Rows(0).Item(3)
End If
If IsDBNull(ds.Tables("lawncutdata").Rows(0).Item(5)) Then
TextBox5.Text = ""
Else
TextBox5.Text = ds.Tables("lawncutdata").Rows(0).Item(5)
End If
maxrecords = ds.Tables("lawncutdata").Rows.Count - 1
currentrecord = 0
firstrecord = 0
currentday = "Monday"
DataGridView1.DataSource = ds.Tables("lawncutdata")
For i As Integer = firstrecord To maxrecords
If DataGridView1.Rows(i).Cells(1).ToString = currentday Then
DataGridView1.DataSource = ds.Tables("lawncutdata").Rows(3)
EndIf
Next
ds.Tables("lawncutdata").DefaultView.RowFilter.Contains("Monday")
End Sub
PS: Was ist der beste Weg, zu speichern täglich Daten? Ich werde sein, die Eingabe von Daten auf einer täglichen basis. Soll ich eine Tabelle erstellen, für Montag, Dienstag usw?
Ich bin mit solch eine harte Zeit mit diesem. Jede Hilfe wird wirklich geschätzt.
Dank
melmatvar
- Ihre Frage, Titel und aktuelle Anforderung sind völlig unterschiedlich. Sind Sie versuchen, Datensätze filtern, basierend auf vorgegebenen Wert oder speichern möchten, die Daten in die Datenbank ein. Und einige geben, die Gabelung über Ihren code?
- Sorry für die nicht klar ist. Filtern von Datensätzen mit einem bestimmten Wert war meine Frage.Zur gleichen Zeit, speichern von Daten in eine Datenbank, als ich auf der Suche nach einer Meinung.
- dann, wie über @jmcilhinney 's Vorschlag. Filtert die Datensätze in Ihrem datagridview?
- Was ist die syntax für den filterString
- haben u versucht wie bestimmten Vorschlag in meinem post @melmatvar
- ich bitte u zu akzeptieren, jmcilhinney Antwort. coz meine Antwort ist nur ein Vorschlag und schon eine Antwort gegeben hat, indem jmcilhinney.
- sorry jmcilhinney, shell. Ich dachte, ich könnte wählen Sie beide und ich landete Kommissionierung ein, denn Sie waren die gleichen.
- Irgendwelche Gedanken auf, wie ich bekommen konnte, um es zu aktualisieren Sie den filter so, dass, wenn weitere Daten Hinzugefügt werden, würde es die Anzeige im datagridview.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Loszuwerden Ihrer Schleife. Legen Sie die
DefaultView.RowFilter
desDataTable
und weisen Sie dann denDataTable
zu denDataSource
des Rasters. Das ist es: filtern und zu binden. Filtern, Sie haben tatsächlich weisen einString
zu denRowFilter
z.B.Sagte, dass, wenn Sie nur wollen, ein Tag-Daten zur Anzeige, dann sollten Sie nur abrufen, eines Tages die Daten aus der Datenbank. Wenn Sie wollen in der Lage sein, um den filter zu ändern, ohne erneutes Abfragen, dann erhalten Sie alle Daten.
Nein, Sie sollte absolut nicht erstellen Sie mehrere Tabellen. Jede Tabelle repräsentiert eine einzelne Person. Die Person ist nicht anders, weil es bezieht sich auf einen anderen Tag. Eine Tabelle mit einer Spalte für den Tag/das Datum/was ist die richtige option.
Dim dt as New DataTable dt.DefaultView.RowFilter = "cutday = 'Monday'" DataGridView1.DataSource = dt
DataTable
hat keine Zeilen oder auch Spalten. Wenn Sie tatsächlich füllen Sie dieDataTable
und sehe immer noch keine Zeilen im raster, dann gibt es keine Zeilen inDataTable
mit "Montag" in dercutday
Spalte. Wenn Sie brauchen, um mehr zu schreiben code dann bitte Bearbeiten Sie die Frage, weil, wie Sie sehen können, die Kommentare nicht behandeln-code sehr gut.RowFilter
einerDataView
weil ich in der Regel binden Sie über eineBindingSource
. Wenn Sie binden IhreDataTable
zu einemBindingSource
und binden, die an das Netz, Sie können dann dieFilter
desBindingSource
die gleiche Weise, und das Netz soll automatisch aktualisiert werden.