`
窗户纸
  • 浏览: 19468 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

在Datagridview控件利用下拉菜单进行枚举数据输入

 
阅读更多

在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;
}
}
}

这样再将重新包装的类绑定到下拉列,就可以实现枚举在列表中的选择了。

分享到:
评论

相关推荐

    c# DataGridView中添加下拉列表

    这个功能在数据输入界面设计中非常实用,能提高用户体验并确保输入数据的一致性。在实际开发中,你可以根据需求调整这些步骤,比如动态加载下拉列表项、处理用户选择的事件等。如果你想要更深入地学习`DataGridView`...

    C#_DataGridView控件使用全攻略

    3. **异常处理**:在数据绑定和用户输入处理中添加适当的异常处理逻辑,确保应用程序的健壮性。 4. **用户界面响应性**:利用DataGridView的异步加载和更新机制,保持UI的流畅体验。 #### 七、常见问题解答(Q&A) ...

    DataGridView控件Combox列数据绑定

    在.NET框架中,`DataGridView`控件是一种常用的用于显示表格数据的组件,广泛应用于Windows Forms应用程序。本知识点将深入探讨如何在`DataGridView`中创建一个ComboBox(下拉列表)列,并将其数据源绑定,以便用户...

    ZCGrid-C#继承DataGridView仿Excel表格,并增强编辑功能

    在.NET框架中,Windows Forms应用程序经常使用DataGridView控件来显示和编辑数据,它是一个功能强大的表格控件。然而,标准的DataGridView控件虽然基础功能齐全,但有时并不能满足开发人员对于高级特性的需求,比如...

    C# WinForm (DataGridViewComboBoxColumn 绑定)自己写的,最简单实例

    在C# WinForm开发中,`DataGridView`是一个非常常用的控件,用于展示表格数据。而`DataGridViewComboBoxColumn`是`DataGridView`的一个列类型,它允许用户在单元格中选择一个值,这个值通常是从下拉列表中选取。在这...

    带颜色选择下拉框的DataGridView(Demo+源码)

    在.NET框架中,`DataGridView`控件是一种常用的用于显示数据表格的组件,广泛应用于Windows Forms应用程序。本示例“带颜色选择下拉框的DataGridView”是针对`DataGridView`控件的一种扩展,它允许用户在某一列中...

    C# datagridview使用实例

    在.NET框架中,`DataGridView`控件是用于显示表格数据的关键组件,特别是在Windows Forms应用程序中。这个控件提供了丰富的功能,允许用户查看、编辑和操作数据。本篇将深入探讨"C# datagridview使用实例",包括基础...

    custom DataGridView Combobox(自定义)

    在.NET框架中,`DataGridView`控件是一种常用的用于显示数据表格的组件,它允许用户查看、编辑和操作数据。在某些场景下,我们可能需要在`DataGridView`的某一列中集成下拉选择功能,这就是`ComboBox`列的作用。在本...

    DotNET_CS(WinForm)开发技巧点滴

    同时,避免在`DataGridView`内部直接编辑数据,以免出现类型检查不严格的问题,如果确实需要,应进行严格的类型检查。 2. **数据导出到Excel**: 导出数据到Excel文件是一个常见的需求。可以使用Microsoft Office ...

    C# 控件缩写大全 vs2005

    - **描述**: 下拉列表控件,结合文本框与列表的功能。 - **应用场景**: 地区选择、类别筛选等。 5. **dtp (DateTimePicker)** - **描述**: 日期时间选择器,用户可以选择日期或时间。 - **应用场景**: 预约...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    C# 3.0完全自学宝典 (F)

    UseDbControls 演示DataGridView控件的使用 UseLINQ 演示如何使用LINQ进行查询 UseLinqExtendMethods 演示LINQ查询的扩展方法 UseOrderBy 演示如何对查询结果进行排序 UseSQLServer 演示如何对SQL Server...

    C#学习总结.docx

    加载数据到DataGridView控件通常涉及以下几个步骤: 1. 创建数据源。 2. 绑定数据源到DataGridView控件。 3. 自定义列样式等。 #### 12. 面向对象技术高级应用 **12.1 抽象类与抽象方法** 抽象类不能被实例化,...

Global site tag (gtag.js) - Google Analytics