编程新手,需要在VB中创建程序以在后台与Excel交互
想法是有两个组合框,一个是“国家”,另一个是“城市”(如果选择国家,城市列表将缩减到该国家;如果选择城市,将自动选择国家); < / p>
我有一个DataGridView,它显示excel speadsheet中的两列,该人的名字和姓氏。
因此,考虑到城市或国家/城市,将显示居住在该国家的人员名单。
此外,我正在尝试创建一个搜索框,当您键入文本字段时,根据您目前输入的内容,它将过滤GridView中的第一个名称(包含您键入的内容)。
到目前为止,我已设法让其他工作正常工作,例如radiobuttons和具有不同选项的复选框。
我找不到任何有关组合框和搜索字段的工作(没有按钮,因此需要进行“实时”过滤过程)。
我对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键进行网格视图更新
我将在这里发布任何开发项目,以便按照建议,如果其他人遇到同样的问题,可以更清楚地看到以下内容......
答案 0 :(得分:0)
您可以Filter
将BindingSource
应用于DataGridView
。您可以将该代码放在ComboBox
的{{1}}事件的事件处理程序中:
SelectedIndexChanged
Private Sub myComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles myComboBox.SelectedIndexChanged
bindingSourceForMyDataGridView.Filter =
"SomeColumn LIKE '%" & myComboBox.SelectedValue & "%'"
End Sub
还有其他处理程序可能更适用,例如ComboBox
或SelectedValueChanged
。
还有其他值可能更适用,具体取决于TextChanged
的填充方式,例如ComboBox
或.Text
。
答案 1 :(得分:0)
好的,基本上我已按照问题所述完成了搜索。
关于组合框,我留下了一个组合框。
通过GUI / Designer模式填充它:
选择组合框
点击小箭头
点击编辑项目
会弹出一个窗口 - 在那里输入您的选项(每行一个选项)
完成后,请将其保存
双击它,代码模式应该出现
我有一个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:我将国家组合框称为&#34;国家&#34; ...