2011-05-01 125 views
3

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

  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";

    但是,选择了一个项目之后,和 当焦点被移动到 不同的细胞,在 选择的项目的组合框(或文本框的文本) 细胞消失。
    编辑:它如果 导致所有组合框细胞得到 是价值,因为它们具有相同的 数据源组合框中选择一个项目似乎 !但即使它是 的情况下,为什么在焦点 移动到不同的单元格后,为什么combox/textbox 单元失去了它的值。

+1

问*只*问题。 – 2011-05-01 18:57:12

+0

由多个问题变为单个问题。 – 2011-05-02 02:54:02

+0

只是一个建议:如果你有时间并且仍然处于项目的开始阶段:WPF和Entity Framework 4会为你节省很多麻烦。我不后悔自己去看。 – LueTm 2011-05-02 04:30:43

回答

1

好了,我现在敢肯定,当我们使用相同的数据源,2个或更多组合框,将值改为1会导致其他人也改变。

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

  1. 在形式负载添加一行, 设置, 特定组合框的细胞(不是 列)的数据源。
  2. 当用户移动到最后一个单元格 并按回车键时,我创建了 另一行,并执行与上面的 相同的操作。

以这种方式,每个单元格都有不同的数据源,尽管我必须做更多的工作,但它的工作。

1

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

选择一个值导致它被选择用于其他小区因为网格使用公共组合框横跨组合框柱,其是用于使列的值的选择使用编辑所有细胞。

您可以通过处理EditingControlShowing事件控制behviour

尝试设置此模式

dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;