日期:2014-05-18  浏览次数:20926 次

如何在datagridview中实现自动提示功能
问题描述:
目前用C#的datagridview做一个表格的配置工具,其中一项需求是在对进行编辑时,希望可以有下拉列表框给出可选项,同时如果没有合适的选项的时候可以接受
用户自己的输入(类似我们在使用visual studio编辑代码时,会给出可供选择的变量,同时你也可以自己输入数据)。

我试着往datagridview中使用DataGridViewComboBoxColumn列,但是有两个问题:
其一,DataGridViewComboBoxColumn显示效果为下拉列表框,该列的每个cell有有个下拉箭头,感觉不是很爽;
其二,使用DataGridViewComboBoxColumn能够实现下拉列表选择的功能,但是原来的cell不能再接受用户的输入了;

想请教大家:
1、datagridview中能否实现在对一个cell进行编辑的时候用弹出窗来提示可以提供给用户的选择数据,类似visual studio那种看不见下拉箭头,而是在你点击一个cell并开始对其进行编辑时自动弹出选择列表?
2、如果只能使用DataGridViewComboBoxColumn,那么该怎样设置才能使其既能从下拉列表中选择数据,同时也能接受用户自己输入的数据?


本人菜鸟,刚开始学C#,希望老鸟菜鸟们在回答的时候能尽量详细一些,谢谢。
先出100分吧,人多的话我再加分。

------解决方案--------------------
1: 可以将DataGridViewComboBoxColumn的下拉箭头隐藏起来:
将该DataGridViewComboBoxColumn的displayStyle设置为Nothing,这样在不进行编辑时这个下拉箭头是隐藏着的

2: 暂时不知道,不过试一下在确定编辑时,将该列的类型改为TextBox类型试试,完事了再改回来
------解决方案--------------------
 
1、DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
DataGridViewComboBoxDisplayStyle.Nothing 在非编辑模式下,
显示不带下拉按钮的DataGridViewComboBoxCell。 
2、要想可改可选不是太清楚,可能需要自定义控件完成了
------解决方案--------------------
用控件吧,试试Infragistics这套控件,你想要的都有。
------解决方案--------------------
第一可以实现的!!
第二还没明白!!
------解决方案--------------------
你好!
第一种很多人都回答了,第二种写DataGridView的EditingControlShowing事件,如下
C# code
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (dataGridView1.CurrentCell.OwningColumn is DataGridViewComboBoxColumn)
            {
                ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
                ((ComboBox)e.Control).AutoCompleteMode = AutoCompleteMode.Append;
                ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems;
            }
        }

------解决方案--------------------
简单地说,DataGridView当你点击它的某个单元格时,它就根据该列设置的EditingControl的Type去实例化一个EditingControl给你编辑,当你完成编辑后将EditingControl中的值传给DataGridView当前的Cell,当DataGridView显示其EditingControl的时候就会触发这个事件,这个时候它会把EditingControl返回给你,由于DataGridViewComboBoxEditingControl继承了ComboBox,所以可以将其强制转化为ComboBox编辑,其他三个属性是ComboBox用来自动完成所需设的属性~
------解决方案--------------------
不懂
学习了
upupupupupup