【问题标题】:DataGridView Winforms Populate ComboBoxCellDataGridView Winforms 填充 ComboBoxCell
【发布时间】:2011-05-01 17:51:32
【问题描述】:

我正在制作一个软件,用户将使用 datagridview 创建发票。 我有一些文本框单元格和一些组合框单元格。 我有一些事情要做:

  1. 我想填充组合框单元格 从数据库表。我试过这个:

    DataTable tblItems = UtilityClass.GetDataTable("SELECT ItemName,ItemID FROM Items"); DataGridViewComboBoxColumn itemCol=DataGridViewComboBoxColumn)dataGridViewNewBill.Columns["ColItem"]; itemCol.DataSource = tblItems; itemCol.DisplayMember = "ItemName"; itemCol.ValueMember = "ItemID";

    但是,在选择了一个项目之后,并且 当焦点移动到 不同的单元格,选择的项目 组合框(或文本框的文本) 单元格消失了。
    编辑:看起来像 如果在组合框中选择一个项目 导致所有组合框单元格获取 那个值,因为他们有 相同的数据源!但即使是 案例,为什么是组合框/文本框 焦点后单元格失去了它的价值 移动到不同的单元格。

【问题讨论】:

  • 只问一个问题。
  • 从多题改为单题。
  • 只是一个建议:如果您有时间并且仍处于项目的开始阶段:WPF 和 Entity Framework 4 将为您节省不少麻烦。我不后悔自己研究它。
  • 您是否正在为网格处理任何事件?

标签: c# .net winforms data-binding


【解决方案1】:

您是否正在处理任何正在擦除数据的特定事件。

选择一个值会导致它被其他单元格选中,因为 Grid 在组合框列的所有单元格中使用了一个通用 ComboBox,它是 EditingControl 用于启用选择列的值。

您可以通过处理 EditingControlShowing 事件来控制行为

尝试设置此模式

dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;

【讨论】:

    【解决方案2】:

    好吧,我现在很确定,当我们为 2 个或更多组合框使用相同的数据源时,更改其中一个的值会导致其他的也发生变化。

    我所做的是禁用添加新行和

    1. 在表单加载中添加了一行, 设置那个的数据源 特定的组合框单元格(不是 列)。
    2. 当用户移动到最后一个单元格时 并按回车键,我创建 另一行并做同样的事情 以上。

    这样每个单元格都有不同的数据源,虽然我还需要做更多的工作但它奏效了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多