当前位置:编程学习 > C#/ASP.NET >>

紧急求助:在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
--------------------编程问答--------------------
引用 5 楼 labc315 的回复:
是4楼的这个效果,但是,我想达到的是 更加用户输入的内容在下拉的 DataGridView 里同时显示内容 而不是控件自带自动完成的那个,因为自带的那个在多列的情况下显示的不太清楚,而且有些字段的数据长度太大的时候就显示效果不理想,所以,
我需要使用 DataGridView 来同时显示RowFilter 后内容,不知道我这么说能否清楚?谢谢楼上的兄弟


修改下,看看能否实现你要的效果,上面那段代码是显示出与输入最接近的那个combobox的选项。
另外,我是女生,不要称呼我兄弟。
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,