我试图在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”列,那么其他列将不包含“自动完成”。但是,如果我从“供应商”列转到另一列,则它包含一个“自动完成”。我该如何解决?
答案 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