DataGridViewComboBoxColumn绑定

时间:2010-05-11 07:03:33

标签: datagridview

这是让我疯了。 我觉得我已经阅读了网上的每一篇文章,但仍然没有任何内容。 所有我试图绑定到列表

gvCompany.DataSource = BLL.Inventory.Company.GetAllActive(forceReload);
DataGridViewComboBoxColumn stateColumn = GridViewComboBoxColumn();
DataGridViewComboBoxCell cellCombo = new DataGridViewComboBoxCell();
stateColumn.DataPropertyName = "StateName";
stateColumn.CellTemplate = cellCombo;
gvCompany.Columns.Add(stateColumn);
 private static DataGridViewComboBoxColumn GridViewComboBoxColumn()
        {
            DataGridViewComboBoxColumn sColumn = new DataGridViewComboBoxColumn();

           sColumn.DataSource = BLL.Inventory.State.GetAllActive();
           sColumn.DisplayMember = "Name";
           sColumn.ValueMember = "OID";
            return sColumn;
        }

有人可以告诉我我做错了什么吗? 它绑定但我没有得到任何下拉,

3 个答案:

答案 0 :(得分:1)

确保在DataGridView上启用编辑功能。这应该允许Combobox列下拉。

答案 1 :(得分:1)

你的代码有点困惑,这应该有效:

void initGridView()
{
    DataGridView gvCompany = new DataGridView();
    DataGridViewComboBoxColumn sColumn = new DataGridViewComboBoxColumn();

    //Load Data to ComboBoxColumn
    sColumn.DataSource = BLL.Inventory.State.GetAllActive();

    sColumn.DisplayMember = "Name";
    sColumn.ValueMember = "OID";
    gvCompany.Columns.Add(sColumn);

    //Load Data
    gvCompany.DataSource = BLL.Inventory.Company.GetAllActive(forceReload);
}

您应首先尝试使用简单的数据源以确保此处没有问题,您可以使用List<String>

您不需要使用DataGridViewComboBoxCell,除非您想在不同的行中指定不同的数据源到组合框。

答案 2 :(得分:0)

尝试绑定到BindingList<T>。通过将DataSource设置为BindingList<T>而不是List<T>,有时可以解决您看到的奇怪行为。例如,假设您的类型名为Company

gvCompany.DataSource = new BindingList<Company>(BLL.Inventory.Company.GetAllActive(forceReload));