【问题标题】:C# DataGridViewComboBoxColumn binding problemC# DataGridViewComboBoxColumn 绑定问题
【发布时间】:2010-09-21 09:04:27
【问题描述】:

大家好!我想这是我在 StackOverFlow.com 上的第一篇文章 :-)

我遇到这个问题已经有一段时间了。 为简单起见,假设我们有 2 个名为 "books""categories" 的数据库表,其架构如下:

书籍(id、title、catId)
类别(id,catName)

显然 "books" 表中的 "catId" 字段是一个外键,它指定了一本书所属的类别。

我已经创建了必要的 LinQ to Sql 类并创建了必要的 bindingSource 对象。 我要做的是在 DataGridView 对象中显示所有书籍。我希望它有一个名为 "Category" 的列,该列的类型为 DataGridViewComboBoxColumn,包含所有现有类别,并且每本书都显示特定书籍所属的类别。用户可以通过在组合框中选择另一个类别来重新分配图书的类别。

我已经成功地用 ComboBox 完成了我想要的工作,并且它可以按我的意愿工作。 但是当涉及到 DataGridView 我就是想不通。

任何帮助将不胜感激 我已经花了好几天的时间来解决问题,但到目前为止还没有运气:-(

【问题讨论】:

    标签: c# winforms data-binding datagridview


    【解决方案1】:

    这应该可行:

    // create the column (probably better done by the designer)
    DataGridViewComboBoxColumn categoryColumn = ...
    
    
    // bind it
    categoryColumn.DataSource = db.Categories.ToList();
    categoryColumn.DisplayMember = "catName";  // display category.catName
    categoryColumn.ValueMember = "id";         // use category.id as the identifier
    categoryColumn.DataPropertyName = "catId"; // bind the column to book.catId
    

    【讨论】:

    • 哇,我简直不敢相信!它按我想要的方式工作。太感谢了!问题是我花了无数个小时来玩这些属性。我也这样设置它们,但没有一个起作用。猜猜我遇到的问题是我设置的“数据源”。我使用 LinQ 来选择它们,但它不起作用。猜猜“ToList()”方法的神奇之处! :-) 想解释一下我们到底在做什么?我总是将“DisplayMember”与“DataPropertyName”混淆。 :-p 再次感谢您的准确回答 :-)
    • DataPropertyName 是所有 DGV 列的公共属性。它是该列表示的数据对象成员的名称。 DisplayMember/ValueMember 特定于 DataGridViewComboBoxColumn。分别表示用于在 UI 中显示对象的成员,以及用作组合的“选定值”的成员(请注意,这些属性也存在于其他控件,如 ComboBox 或 ListBox)
    • 感谢您的解释! “DataPropertyName”设置为“catId”,它是“book”的属性。 “categoryColumn”的“DataSource”被分配给“Categories”。这究竟是如何工作的? AFAIK 我们告诉编译器“categoryColumn”绑定到“Books”的“catId”。但是“categoryColumn”和“Books”之间的联系在哪里?!
    • categoryColumnBooks 之间没有链接。 DGV 的每一行代表一本书。类别列中单元格的值是图书的catId 属性。它由ComboBox 表示,其选定值为catId
    • 啊哈!我懂了!非常感谢你的帮助朋友:-)
    【解决方案2】:

    我设法通过覆盖相关类中的 ToString() 方法来做到这一点。 对于您的情况,您可以添加类别的定义:

    public override string ToString()
    {
       return this.catName
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-27
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多