在Datagridview控件利用下拉菜单进行数据输入可以使用户操作更加方便,在配置COMBOX控件时,只要设置了datasource, displaymember,valuemember,即可实现comboxbox的数据输入,如:
有一个类如下:
public class Class1
{
string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
int _Weight;
public int Weight
{
get { return Weight; }
set { Weight = value; }
}
}
如果存在集合List<Class1> P1
定义一个Combobox1.DataSource= P1;
Combobox1.DisplayMember="Name";
ComboBox1.ValueMember="Weight";
这样,在获取Combobox1.SelectedItem时,获取的是对象的Weight值,
而如果将combobox的datasource绑定一个枚举enmu的话,不用设置displaymember及valuemember即可通过selectedItem获得枚举值。
对于一个列表控件Dgv_ClassTest,要添加DataGridViewComboBoxColumns,也可以采用同样方法,如将下拉菜单了的数据源对应valuememeber设为Class1,则该列添加的单元格的类型也必须是Class1类型,因此我们要对原有的Class1进行一下改造:
public class Class1
{
string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
int Weight;
public int Weight1
{
get { return Weight; }
set { Weight = value; }
}
public Class1 Class1
{
get
{
return This;
}
}
}
这样在选中一项纪录时,就可以按如下方式配置列:
CmbCol.DataSource=P1;
CmbCol.DisPlayMember=="Name";
CmbCol.ValueMember="Class1";
假设存在一个类如下:
public class Class2
{
private Class1 _C1;
public Class1 C1
{
get { return _C1; }
set { _C1 = value; }
}
private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
}
有一个该类的集合BindingList<Class2> P2对列表进行绑定
Dgv_ClassTest.Datasource=P2;
CmbCol.DataBoundItem="C1";
NameCol.DataBoundItem="Name";
这样P2集合就可以通过列表控件进行数据的输入输出了。
但对于枚举,因为无法设置DisplayMember和ValueMember, 因此绑定时会报值无效的错误,网上国内国外的帖子的解决方法都是重写dataerorr事件,当这是个馊主意,因为异常发生了,就得解决,抛出去不理怎们行,况且这样简单抛掉,其他错误也会抛掉,反而不利于排错。
我的解决方法是,将枚举重新打包成一个新的静态类,比如,我们将KnownColor枚举包装如下:
public class MyKnownColor
{
private KnownColor _color;
private static List<MyKnownColor> _ColorList;
public static List<MyKnownColor> ColorList
{
get
{
if (_ColorList == null)
{
_ColorList = new List<MyKnownColor>();
Array xx = Enum.GetValues(typeof(KnownColor));
MyKnownColor p = null;
foreach (KnownColor x in xx)
{
p = new MyKnownColor(x);
ColorList.Add(p);
}
}
return MyKnownColor._ColorList;
}
}
public MyKnownColor Color
{
get { return this ; }
}
private MyKnownColor(KnownColor c)
{
_color = c;
}
public string Name
{
get
{
return _color.ToString();
}
}
public KnownColor KnownColor
{
get
{
return _color;
}
}
public int Index
{
get
{
return _color.GetHashCode()-1;
}
}
}
这样再将重新包装的类绑定到下拉列,就可以实现枚举在列表中的选择了。
分享到:
相关推荐
在datagridview控件实现下拉列表 在datagridview控件实现下拉列表 在datagridview控件实现下拉列表
在DataGridView控件中加入ComboBox下拉列表框的实现
DataGridView中输入错误数据的处理(五) 26. DataGridView单元格数据错误标签表示 27. DataGridView单元格内输入值正确性判断 28. DataGridView单元格输入错误值事件的捕获 DataGridView控件用法合集(六) 29. ...
DataGridView控件中加入ComboBox下拉列表框
直接在DataGridView控件中修改数据
利用datagridview控件实现批量输入数据并存入数据库
在DataGridView控件中加入ComboBox下拉列表框的实现案例
给DataGridView表头添加下拉列表实现数据过滤,附上修改功能代码,实现选择性添加下拉选择。
vb.net DataGridView控件用法,.net DataGridView控件用法,GridView用法
利用DataGridView控件查看.xls数据清单并批量导入到数据库文件中.doc ) 利用DataGridView控件查看.xls数据清单并批量导入到数据库文件中.doc ) 利用DataGridView控件查看.xls数据清单并批量导入到数据库文件中.doc )...
在C#的WinForm中,DataGridView控件是一种常见的控件,用于显示和编辑表格数据。下面将对DataGridView控件的操作进行汇总。 一、单元格内容的操作 在DataGridView控件中,可以通过CurrentCell属性来获取当前单元格...
注:本程序为个人原创,...4,手动输入一个下拉列表中不存在的值时,程序会自动将该值添加到数据源中,此时隐藏值(Key)和显示值(Value)一致。 5,获取到的单元格的值Value(也即Row[i].Cell[j].Value)为隐藏值(也即Key)
c# DataGridView中添加下拉列表! 很值得下载看看!资源免费,大家分享!!
在DataGridView表格中,实现类似Excel列头出现下拉框,可以筛选数据的功能,有全部的应用代码
我也偶尔在别的地方下载来看了下别人写的东西 感觉不是这缺就是那少 都不大完美 这段 C# DataGridView 控件内容打印代码 是经本人在VS2008下测试通过 可以实现对DataGridView绑定的记录进行打印预览及打印的 ...
DataGridView控件使用大全,.Net2.0 WinForm
C# DataGridView控件使用完全攻略 DataGridView是用于Windows Froms 2.0的新网格控件。它可以取代先前版本中DataGrid控 件,它易于使用并高度可定制,支持很多我们的用户需要的特性。 关于本文档: 本文档不准备...
可能过form窗口中的datagridview控件来显示access数据库,并通过修改datagridview内容来达到修改后台数据库的过程。
通过datagridview控件,将数据读入数据库中,或将数据读出在datagridview里。。。。