簡體   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