DataGridViewComboBoxColumn设置选定的索引

时间:2012-12-12 02:07:35

标签: winforms datagridview indexing datagridviewcombobox

我无法让这个工作。 我在winforms中有一个datagridview,在我的一个列中有一个DataGridViewComboBoxColumn。

在我的构造函数中,我将其设置为

DataGridViewComboBoxColumn column = (DataGridViewComboBoxColumn)RectangleGrid.Columns["Material"];

        DataTable data = new DataTable();

        data.Columns.Add(new DataColumn("Value", typeof(int)));
        data.Columns.Add(new DataColumn("Description", typeof(string)));

        foreach (Materials M in DataStructure.Active.Active_Materials)
        {
            data.Rows.Add(M.MaterialNr, (M.MaterialNr + 1).ToString() + " " + M.Material.Name);
        }

        column.DataSource = data;
        column.ValueMember = "Value";
        column.DisplayMember = "Description";

它实际上运行良好,除了在我想要的下拉框中没有选择任何内容。我已经用Google搜索了这个方法,例如尝试了这种方法:http://goo.gl/kBy8W但是没有去,因为只有当我点击框而不是第一次出现时,才会发生EditingControlShowing(所以我可以在点击后设置选定的索引但是没有好处)。 CellFormatting版本至少会更改值,但它只是在那里放置一个字符串而不是我的第一个索引来自我的数据源。

我也试过这个

column.DefaultCellStyle.NullValue = data.Rows[0]["Description"];
column.DefaultCellStyle.DataSourceNullValue = data.Rows[0]["Value"];

这似乎有效,但是当我选择下拉列表中的第一个索引时(所以放下下拉列表然后选择第一个索引然后去除单元格)我从ParseFormattedValue得到一个错误,它说它无法转换“值“到system.String。

这似乎是在正确的轨道上,但我无法让它工作:http://goo.gl/VevA3

1 个答案:

答案 0 :(得分:0)

我最终在一个非常肮脏的解决方案中“解决”它,我不喜欢它,但它有点工作。

我将datagridview绑定到数据表(而不是数据库),所以我所做的是将事件处理程序连接到数据表中的TableNewRow事件。

然后我在那个事件处理程序

中做了这个
    private void NewRectangleInserted(Object sender, DataTableNewRowEventArgs e)
    {
        if (e.Row[0].ToString() == "")
        {
            e.Row[0] = 0;
        }
    }

所以基本上当创建一个新行时,我将组合框的值设置为0,除非用户通过在该特定单元格中添加一个值来创建该行(为什么我检查它是否等于“”)

结果是,只要您突出显示一行中的新行或任何单元格,就会填充组合框。但是,在您突出显示它之前,按钮上的新行仍然有一个空白的组合框。

不完美但更好。坏了,必须用黑客来完成!