Vb.net DataGridView基于值筛选行

Vb.net DataGridView基于值筛选行,vb.net,datagridview,visual-studio-2013,visual-studio-express,Vb.net,Datagridview,Visual Studio 2013,Visual Studio Express,我正在vs2013中处理windows窗体。我正在尝试在加载窗体时根据DataGridView上的变量显示记录。我尝试了基于谷歌研究的各种代码 我正在将表单数据连接到access数据库 代码如下: Dim maxrecords As Integer Dim firstrecord As Integer Dim currentrecord As Integer Dim deletedrecordnum As Integer Dim con As New OleDb.OleDbConnection

我正在vs2013中处理windows窗体。我正在尝试在加载窗体时根据DataGridView上的变量显示记录。我尝试了基于谷歌研究的各种代码

我正在将表单数据连接到access数据库

代码如下:

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:存储日常数据的最佳方式是什么?我将每天输入数据。我应该为周一、周二等创建一个表吗

这件事让我很难受。非常感谢您的帮助

谢谢
melmatvar

摆脱你的循环。设置
DataTable
DefaultView.RowFilter
,然后将
DataTable
分配给网格的
DataSource
。就是这样:过滤和绑定。要进行筛选,您实际上必须为
行筛选器
分配一个
字符串
,例如

myDataTable.DefaultView.RowFilter = filterString
也就是说,如果您只希望显示一天的数据,那么您应该只从数据库中检索一天的数据。如果您希望能够在不重新查询的情况下更改过滤器,请获取所有数据


不,绝对不应该创建多个表。每个表表示一个实体。实体之所以不同,是因为它与不同的日期相关。一个表格,其中列有日期/日期/任何正确选项。

您的问题标题和实际要求完全不同。您正在尝试根据给定的参数值筛选记录,还是希望将数据存储到数据库中。对你的代码有分歧吗?很抱歉不清楚。过滤具有给定值的记录是我的问题。同时,将数据存储到数据库中,我认为是在寻找意见。那么@jmchilinney的建议呢。这将过滤datagridview中的记录?filterStringi请求u接受jmcilhinney答案的语法是什么。因为我的答案只是一个建议,而且已经是JMCILHINEY给出的相同答案。我试过了,但什么也没发现。这就是我目前所拥有的
Dim dt as New DataTable dt.DefaultView.RowFilter=“cutday=‘Monday’”DataGridView1.DataSource=dt
如果这就是您所有的代码,那么当然不会显示任何内容,因为您的
DataTable
没有行,甚至没有列。如果您确实填充了
数据表
,但在网格中仍然没有看到任何行,则
数据表
中的
列中没有带有“星期一”的行。如果您需要发布更多代码,请编辑您的问题,因为正如您所看到的,注释不能很好地处理代码。我已经让它工作了,但如果我添加新记录,它将不会更新。我是新手。你是说更新数据库吗?这与这个问题无关。我建议在这个话题上专门问一个新问题。我想出来了。这是一个刷新datagridview的问题。谢谢大家的帮助。我处在一块岩石和一块坚硬的地方之间。非常感谢。