繁体   English   中英

使用VB.net和Excel(组合框和搜索)

[英]Using VB.net and excel (combo box & search)

编程新手,需要在VB中创建程序才能在后台与Excel交互

这个想法是有两个组合框,一个“国家”,另一个“城市”(如果选择了国家,则城市列表将减少到该国家;如果选择了城市,则将自动选择国家);

我有一个DataGridView,它显示excel speadsheet中的两列,该人的拳头名称和姓氏。

因此,给定一个城市或一个国家/城市,将显示居住在该国家/地区的人员列表。

另外,我正在尝试创建一个搜索框,当您在文本字段中键入内容时,鉴于您到目前为止所键入的内容,它将过滤GridView中的名字(包含您键入的内容)。

到目前为止,我设法使其他功能正常工作,例如具有不同选项的单选按钮和复选框。

对于组合框和搜索字段,我找不到任何有效的方法(没有按钮,因此需要进行“实时”过滤过程)。

我对SQL很满意,因此到目前为止,我一直在使用sql将查询发送到excel并为网格视图检索信息。

能否请你帮忙? (可能提供了我应该如何编码的模板。...)


我正在使用Visual Basic 2012和OleDB 4.0(如果我没记错的话)建立连接。


鉴于以下评论,我为搜索栏找到的解决方法是创建一个按钮,然后使其尽可能小,然后通过“向后发送”使其隐藏,将其隐藏在搜索栏后面,以使其看起来不可见。完全禁用它...

然后,我将以下代码用于按钮:

    Private Sub BtSearch_Click(sender As Object, e As EventArgs) Handles BtSearch.Click

    Try
        FillSearchResults("SELECT First_Name, Last_Name FROM [Database$] WHERE Country LIKE '%" & Country.Text & "%'")
        Country.Text = dt.Rows(0).Item(1)

    Catch ex As Exception
        MsgBox("Not Found")
    End Try

End Sub

对于文本字段(当用户单击Enter时显示搜索结果):

Private Sub CountrySearch_TextChanged(sender As Object, e As EventArgs) Handles CountrySearch.TextChanged

    Me.AcceptButton = BtSearch

End Sub

下一步:我可能会尝试应用过滤器,以便用户不必按Enter即可更新网格视图


我将在此处发布任何开发内容,以便按照建议进行操作,如果其他任何人也遇到相同的问题,则可以很清楚地看到后续问题...

您可以将Filter应用于DataGridViewBindingSource 您可以将该代码放入ComboBoxSelectedIndexChanged事件的事件处理程序中:

Private Sub myComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles myComboBox.SelectedIndexChanged
    bindingSourceForMyDataGridView.Filter = 
        "SomeColumn LIKE '%" & myComboBox.SelectedValue & "%'"
End Sub

还有其他适用于ComboBox处理程序,例如SelectedValueChangedTextChanged
根据ComboBox的填充方式,还有其他一些值可能更适用,例如.Text.SelectedText

好的,基本上我已经按照问题中的描述进行了搜索。

关于组合框,我留下了一个组合框。

通过GUI /设计器模式填充它:

  • 选择组合框

  • 点击小箭头

  • 点击编辑项目

  • 将会弹出一个窗口-在此输入您的选项(每行一个选项)

  • 完成后,将其保存

双击它,代码模式应该出现

我有一个FillSearchResults函数,它将SQL语句发送到excel并将该信息放入网格视图中:

        Private Sub FillSearchResults(ByVal Query As String)

    Dim da As OleDbDataAdapter
    Dim dt As New DataTable

    'The Connection should already be open'

    da = New OleDbDataAdapter(Query, cn)
    dt.Clear()
    da.Fill(dt)

    'To name the columns and make it so that when the window size is changed the column widths would automatically adjust'
    With SearchResults
        .DataSource = dt
        .Columns(0).HeaderText = "First Name"
        .Columns(1).HeaderText = "Second Name"
        .Columns(2).HeaderText = "Country"
        .Columns(3).HeaderText = "Completed Fully"
        .Columns(0).Width = 70
    End With

    'To Color the whole rows depending if all of the information is complete (I do realise this is not the best way to do it but still...)'
    For i As Integer = 0 To Me.SearchResults.Rows.Count - 1
        If Me.SearchResults.Rows(i).Cells("Completed_Fully").Value.ToString = "No" Then
            Me.SearchResults.Rows(i).Cells("First_Name").Style.BackColor = Color.Cornsilk
            Me.SearchResults.Rows(i).Cells("Second_Name").Style.BackColor = Color.Cornsilk
            Me.SearchResults.Rows(i).Cells("Country").Style.BackColor = Color.Cornsilk
            Me.SearchResults.Rows(i).Cells("Completed_Fully").Style.BackColor = Color.Cornsilk

        ElseIf Me.SearchResults.Rows(i).Cells("Completed_Fully").Value.ToString = "Yes" Then
            Me.SearchResults.Rows(i).Cells("First_Name").Style.BackColor = Color.Azure
            Me.SearchResults.Rows(i).Cells("Second_Name").Style.BackColor = Color.Azure
            Me.SearchResults.Rows(i).Cells("Country").Style.BackColor = Color.Azure
            Me.SearchResults.Rows(i).Cells("Completed_Fully").Style.BackColor = Color.Azure

        Else
            Me.SearchResults.RowsDefaultCellStyle.BackColor = Color.Red
            Me.SearchResults.ClearSelection()
        End If
    Next

   'To Clear the first row/cell being selected'
    Me.SearchResults.ClearSelection()

End Sub

现在链接国家字段:

    Private Sub Country_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Country.SelectedIndexChanged

    FillSearchResults(SELECT Country FROM Database WHERE Country LIKE '%" & Country.Text & "%' ")

End Sub

并做了 :)

每当选择一个国家/地区时,只会显示该国家/地区的结果

PS:我称国家组合框为“国家” ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM