Создание одного столбца автозаполнения DataGridView для строковых данных - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь настроить DataGridView в VB.Net, где один столбец, называемый «Поставщик», действует как TextBox с 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).

Что мне нужно сделать, чтобы это исправить?

ПРАВКАЯ немного изменил код, чтобы попытаться исправить проблему, и это сработало.Если я сначала не выбрал столбец «Поставщик», то в других столбцах не будет автозаполнения.Однако если я перейду из столбца «Поставщик» в другой столбец, он будет содержать автозаполнение.Как мне это исправить?

1 Ответ

0 голосов
/ 30 ноября 2018

Когда вы делаете

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...