c# - Datagridview组合框业务对象更新引用

标签 c# visual-studio-2008 data-binding datagridview c#-2.0

我最近问了这个问题on here并得到了答案。不过,我现在尝试在绑定(bind)到 Curriculum 对象的 BindingList< T > 的 DataGridView 上应用相同的逻辑。 Curriculum 类具有 Year 类型的属性。我正在尝试使用 ComboBoxColumn 来更新类(class)对象多年来的引用。

组合框列绑定(bind)到多年的 BindingList,如果我设置显示成员或值成员,则会出错,因此我将它们保留为空。执行此操作后,datagridview 成功加载并正确显示数据(我覆盖了年份类上的 ToString 方法)。但是,如果我从组合框中选择另一个年份对象,一旦编辑结束,它就会抛出异常,指出它无法将字符串转换为年份类型。

看起来我需要一个 TypeConverter 来做到这一点,但问题是组合框正在显示一个描述性值,我不能保证该值对于该年份对象是唯一的 - 所以我无法获取年份对象来自给定的字符串。

有没有人有过类似情况的经验,这一定是一件很常见的事情,但谷歌这次让我失望了。

马龙

最佳答案

here 相同的问题。组合框列中的对象绑定(bind)似乎无法正常工作,您必须指定 ValueMember。

对于我正在从事的特定项目,我得出的结论是不值得实现自定义类型描述符,因此,我使用了一个相当可怕的黑客:

在我绑定(bind)的实体中,我有以下内容:

class TestEntity
{
    public TestEntity BindingHack_ValueMember
    {
        get
        {
           return this;
        }
    }
    public string BindingHack_DisplayMember
    {
        get
        {
            return this.ToString();
        }
    }
}

该列的数据绑定(bind)如下所示:

column.DataPropertyName = "Foo";
column.DisplayMember = "BindingHack_DisplayMember";
column.ValueMember = "BindingHack_ValueMember";

也许有点难看,但它有效......

关于c# - Datagridview组合框业务对象更新引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3821480/

相关文章:

c# - 将上传的文件存储在数据库中或将其存储在文件系统中哪个好

c++ - 是否可以将其他文件类型添加到 Visual Studios 清理程序中?

winforms - NHibernate、WinForms 和 DataBinding - 它们可以很好地协同工作吗?

vb.net - 如何制作复合用户控件 VB.NET

c# - 在 Silverlight 中看不到对象/效果时是否会呈现它们?

c# - 如何使用 Kinect 跟踪一个人 (trackingID)

c# - 如何从 JavaScript 调用方法背后的代码

c# - 由调试器引起时命中断点

visual-studio - msi安装后运行exe吗?

c# - 当 SelectedItem 为 null 时,对象绑定(bind)到 Winforms ComboBox 失败