使一列DataGridView自动完成用于字符串数据

时间:2018-11-30 18:46:51

标签: vb.net datagridview autocomplete

我试图在VB.Net中建立一个DataGridView,其中一个名为“ Supplier”的列充当具有AutoCompleteSource的文本框,以帮助用户输入数据。这是我拼凑的代码,试图完成此任务:

Private Sub OrderData_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles orderData.EditingControlShowing
    Dim colIndex = orderData.SelectedCells.Item(0).ColumnIndex
    Dim headerText As String = orderData.Columns(colIndex).HeaderText
    If headerText.Equals("Supplier") Then
        Dim autoText As TextBox = TryCast(e.Control, TextBox)
        If autoText IsNot Nothing Then
            autoText.AutoCompleteMode = AutoCompleteMode.SuggestAppend
            autoText.AutoCompleteSource = AutoCompleteSource.CustomSource
            autoText.AutoCompleteCustomSource = FillTextBoxData("supplier_name", "suppliers")
        End If
    End If
End Sub

我有点作品。不幸的是,它向表中的每个可编辑列添加了自动完成功能,而不仅仅是“供应商”列(列索引2)。

该如何解决?

编辑:我对代码进行了一些修改,以尝试解决此问题,并且这种方法行之有效。如果我没有首先选择“ Supplier”列,那么其他列将不包含“自动完成”。但是,如果我从“供应商”列转到另一列,则它包含一个“自动完成”。我该如何解决?

1 个答案:

答案 0 :(得分:0)

这样做的时候

Dim headerText As String = orderData.Columns(2).HeaderText
If headerText.Equals("Supplier") Then

这将永远是正确的,因为无论选择哪个单元格,您总是会获得col 2标头,因此您需要添加它,例如

Dim colIndex = orderData.SelectedCells.Item(0).ColumnIndex

然后您就可以使用代码了

Dim headerText As String = orderData.Columns(colIndex).HeaderText

还要在Else语句中添加If headerText.Equals("Supplier") Then子句。在Else部分中添加行autoText.AutoCompleteMode = AutoCompleteMode.None