【问题标题】:Datagridview combobox business object updating referenceDatagridview 组合框业务对象更新参考
【发布时间】:2011-04-18 19:12:36
【问题描述】:

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

comboboxcolumn 绑定到 BindingList 年,如果我设置显示成员或值成员会出错,因此我将它们留空。这样做,datagridview 成功加载并正确显示数据(我覆盖了 year 类的 ToString 方法)。但是,如果我从组合框中选择另一个年份对象,一旦它结束编辑,它就会抛出异常,说它不能将字符串转换为年份类型。

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

有没有人在这种情况下有任何经验,这一定是一件很常见的事情,但谷歌这次让我失望了。

马龙

【问题讨论】:

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


    【解决方案1】:

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

    对于我正在处理的特定项目,我得出结论认为不值得实现自定义类型描述符,因此,我使用了一个相当可怕的 hack:

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

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

    列的数据绑定如下所示:

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

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

    【讨论】:

    • 感谢 Laviak,我已经重新使用 idents,但如果再次出现这种情况,我会这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多