DataGridView Winforms填充ComboBoxCell

时间:2011-05-01 17:51:32

标签: c# .net winforms data-binding

我正在制作一个软件,用户将使用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";

    但是,选择一个项目后,和 焦点移动到a时 不同的单元格,选中的项目 组合框(或文本框的文本) 细胞消失。
    编辑:似乎如此 如果选择组合框中的项目 导致所有组合框细胞得到 那个价值,因为他们有 相同的数据源!但即使它是 这个案例,为什么是combox / textbox 细胞聚焦后细胞失去了它的价值 搬到另一个牢房。

2 个答案:

答案 0 :(得分:1)

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

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

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

尝试设置此模式

dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;

答案 1 :(得分:1)

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

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

  1. 在表单中加载一行, 设置它的数据源 特别是组合框细胞(不是 列)。
  2. 当用户移动到最后一个单元格时 并按下输入键,我创建 另一行并做同样的事情 上方。
  3. 通过这种方式,每个单元格都有不同的数据源,但我必须做更多的工作,但它有效。