紧急求助:在Combox 中下拉DataGridView 只差一步,高手支招,在线等。
希望达到的目标:在Combox中输入内容 即时的在他的下拉框中显示检索的内容,然后按回车或者向下键选择其中的内容。
现在已经实现了绑定DataGridView,但是还不能实现,边输入边显示,请高手支招。
文件下载地址:
http://www.rayfile.com/files/e53aba3a-61f9-11de-bdc7-0014221b798a/ --------------------编程问答-------------------- 在该控件的属性里直接设置就可以
AutoCompleteMode=SuggestAppend
AutoCompleteSource=ListItems --------------------编程问答-------------------- 由于控件绑定了DataGridView 直接用这个属性是不可以的,请下载例子查看 --------------------编程问答-------------------- 重写Combobox控件,绑定控件
或用第三方控件 --------------------编程问答-------------------- 看了你的代码了,你可以这样写,看看是不是你想要的效果;
‘我把你的combobox的名字改为cmbTest了。
Me.cmbTest.PopupGridAutoSize = False
Me.cmbTest.DropDownHeight = 300
Me.cmbTest.DropDownWidth = 240
Me.cmbTest.DataSource = GetDataTable()
Me.cmbTest.AutoCompleteMode = AutoCompleteMode.SuggestAppend
Dim str As New AutoCompleteStringCollection
For i As Integer = 0 To GetDataTable.Rows.Count - 1
str.Add(GetDataTable.Rows(i).Item("编号"))
Next
Me.cmbTest.AutoCompleteSource = AutoCompleteSource.CustomSource
cmbTest.AutoCompleteCustomSource = str
Me.cmbTest.RowFilterVisible = True
--------------------编程问答-------------------- 是4楼的这个效果,但是,我想达到的是 更加用户输入的内容在下拉的 DataGridView 里同时显示内容 而不是控件自带自动完成的那个,因为自带的那个在多列的情况下显示的不太清楚,而且有些字段的数据长度太大的时候就显示效果不理想,所以,
我需要使用 DataGridView 来同时显示RowFilter 后内容,不知道我这么说能否清楚?谢谢楼上的兄弟 --------------------编程问答-------------------- 问题还没有解决 --------------------编程问答-------------------- 那给你一段代码参考下,
Public Sub AutoComplete(ByVal cmb As ComboBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If cmb.DataSource Is Nothing Then
Return
End If
If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then
Return
End If
Dim strFindStr As String = ""
If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Back) Then
If (cmb.SelectionStart >= cmb.Text.Length) Then
If cmb.Text.Length > 0 Then
strFindStr = cmb.Text.Substring(0, cmb.Text.Length - 1)
End If
Else
If cmb.SelectionStart > 0 Then
strFindStr = cmb.Text.Substring(0, cmb.SelectionStart - 1)
End If
End If
e.Handled = False
Else
If (cmb.SelectionLength = 0) Then
strFindStr = cmb.Text + e.KeyChar
Else
If (cmb.SelectionStart >= cmb.Text.Length) Then
strFindStr = e.KeyChar
Else
If cmb.SelectionStart > 0 Then
strFindStr = cmb.Text.Substring(0, cmb.SelectionStart - 1) + e.KeyChar
Else
strFindStr = e.KeyChar
End If
End If
End If
End If
Dim intIdx As Integer = -1
Dim dv As DataView
If TypeOf (cmb.DataSource) Is DataTable Then
dv = CType(cmb.DataSource, DataTable).DefaultView
If strFindStr <> "" Then
dv.RowFilter = cmb.DisplayMember & " Like '%" & strFindStr & "%'"
Else
dv.RowFilter = ""
End If
cmb.DataSource = dv
cmb.SelectedIndex = -1
cmb.Text = strFindStr
Else
dv = CType(cmb.DataSource, DataView)
If strFindStr <> "" Then
dv.RowFilter = cmb.DisplayMember & " Like '%" & strFindStr & "%'"
Else
dv.RowFilter = ""
End If
cmb.DataSource = dv
cmb.SelectedIndex = -1
cmb.Text = strFindStr
End If
cmb.SelectionStart = strFindStr.Length
e.Handled = True
End Sub
--------------------编程问答--------------------
修改下,看看能否实现你要的效果,上面那段代码是显示出与输入最接近的那个combobox的选项。
另外,我是女生,不要称呼我兄弟。
补充:.NET技术 , VB.NET