DataGridView 中的自动完成文本框列停止工作

问题描述 投票:0回答:3

我有一个 datagridview,其中一列为 TextBox。我编写了一个函数来填充数据库中的值并建议值以自动完成文本。我实现了它,然后我开始编码以使列自动递增 (Sr.No) ,所以我又编写了一些代码行并更改了一些属性,突然文本框停止了自动完成。现在我尝试了一切可能的步骤来使其发挥作用,但失败了。我不知道我改变的属性是什么影响了这个。 我把我的代码放在这里,请帮忙

这是 Editingcontrolshowing 事件的代码...

 Private Sub DataGridView2_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView2.EditingControlShowing


    DataGridView2.BeginEdit(True)
    Dim autoText As TextBox = TryCast(e.Control, TextBox)
    If autoText IsNot Nothing Then
        autoText.AutoCompleteMode = AutoCompleteMode.SuggestAppend
        autoText.AutoCompleteCustomSource = AutoCompleteLoad()
        autoText.AutoCompleteSource = AutoCompleteSource.CustomSource
    End If
End Sub

这是我加载值的自动完成功能...

 Public Function AutoCompleteLoad() As AutoCompleteStringCollection
    Dim str As AutoCompleteStringCollection = New AutoCompleteStringCollection()
    Dim ConnectionString As SqlConnection = New SqlConnection("data source=ADMIN-PC\SQLEXPRESS; database=billdev;Trusted_Connection=yes;")
    Dim strSQL As String = "SELECT * from bill;"
    Dim SQLcommand As New SqlCommand(strSQL, ConnectionString)
    ConnectionString.Open()
    Dim reader As SqlDataReader
    reader = SQLcommand.ExecuteReader()

    While reader.Read()
        str.Add(reader.Item(1))
    End While

    Return str

End Function

这是我在停止工作之前添加的额外代码,但我认为这没有任何区别

    Private Sub DataGridView2_RowPrePaint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowPrePaintEventArgs) Handles DataGridView2.RowPrePaint

    If e.RowIndex >= 0 Then
        Me.DataGridView2.Rows(e.RowIndex).Cells(0).Value = e.RowIndex + 1
    End If
End Sub
sql-server vb.net datagridview
3个回答
0
投票

我找到了解决方案。 我尝试随机更改 datagridview 的每个属性。终于进入正题了。 它是列本身的

WRAP
属性。


0
投票

哇,我遇到了自动完成功能不起作用的问题,是的,自动换行阻止了自动完成功能的工作。谢谢 Shreekant,抱歉你花了很长时间才发现,但这确实对我有帮助。

也为了只对一列执行此操作,在 EditingControlShowing 过程中,我使用了:

如果_DataGridView.Columns(the_DataGridView.CurrentCell.ColumnIndex).HeaderText = "标题文本"

使其仅适用于该列。很多网页和 YouTube 视频都会检查第 (1) 列,这纯粹是无稽之谈。


0
投票

参考Shreekant的

我找到了解决方案。我尝试随机更改 datagridview 的每个属性。终于进入正题了。它是列本身的 WRAP 属性。

您还需要检查 DefaultCellstyle.wrapMode 它应该为 Not set 或 false。

© www.soinside.com 2019 - 2024. All rights reserved.