Datagridview Combobox列不会下拉(C#)

时间:2012-05-29 18:12:18

标签: c# drop-down-menu datagridview combobox

我有一个数据网格视图,其中包含8列组合框和32行。

    private void frm_Main_Load(object sender, EventArgs e)
    {
        // Make 32 rows total
        for (int i = 0; i <= 30; i++)
        {
            DataGridView1.Rows.Add();
        }
        PopulateComboBoxes();
    }

我还为每个人添加了一些项目。出于某种原因,当我点击它们时它们不会下降。

我环顾四周,但似乎没什么用。

编辑: 它只是添加了

中的每个下拉选项
    public void PopulateDropDowns()
    {
        //Get Errors
        DataSet Errors = SendQueryReturnDataSet("SELECT * FROM DB.Errors");
        DataTable dt_Errors = Errors.Tables[0];

        //Populate all Drop Downs
        for (int i = 0; i < dt_Errors.Rows.Count; i++)
        {
            for (int x = 0; x<8; x++)
            {
                for (int y = 0; y < 32; y++)
                {
                    (grid_Wafer.Rows[x].Cells[y] as DataGridViewComboBoxCell).Items.Add(dt_Errors.Rows[i][1].ToString());
                }
            }
        }

    }

5 个答案:

答案 0 :(得分:2)

我有这样的问题。我在调试器中发现的是DataGridViewComboBoxCells的ReadOnly属性设置为True。尽管我在设计模式下创建它时整个列都将属性保留为False。我找不到任何细胞或柱子被设置为只读的地方。在我的代码中,我在分配给数据源后切换了只读,现在组合框似乎没有问题。

编辑:我发现网格的RowTemplate已将Readonly设置为True,这导致了这个问题。我认为在我尝试各种设置时一定会发生这种情况。

答案 1 :(得分:1)

我们需要更多信息才能准确地解决这个问题。你能告诉我们你的前端代码吗?也许你的PopulateComboBoxes()方法?

有些事情浮现在我脑海中......

  • 由于某种原因,您的下拉菜单没有正确填充(请查看您的页面的查看源以查看这些项目是否实际添加到您的下拉列表中)

  • 也许是样式问题? (检查你的z-index属性并确保没有任何东西在你的下拉列表中更高的堆栈。尝试将你的下拉式z-index设置为99999)

即使有了我的上述建议,我还需要查看更多代码才能给出正确答案。

答案 2 :(得分:0)

private void Form1_Load(object sender, EventArgs e)
{
    PopulateComboBoxes();
    // Make 32 rows total
    for (int i = 0; i <= 30; i++)
    {
        dataGridView1.Rows.Add();
    }
}

private void PopulateComboBoxes()
{
    //for each column, set as combobox, then populate
    var cName = new DataGridViewComboBoxColumn();
    cName.Items.Add("John Galt");
    cName.Items.Add("Tim Duncan");
    cName.Items.Add("King Leonidas");
    var cAddress = new DataGridViewComboBoxColumn();
    cAddress.Items.Add("Main Street");
    cAddress.Items.Add("Broad Street");
    cAddress.Items.Add("Market Street");

    dataGridView1.Columns.Add(cName);
    dataGridView1.Columns.Add(cAddress);

}

答案 3 :(得分:0)

我已经几次点击这个,发现如果DataGridView ComboBox列绑定到只读字段(即没有定义setter),它将显示为只读。如果您尝试Rob Hincliff建议的答案,您将获得此异常:绑定到只读字段的 DataGridView列必须将ReadOnly设置为True

答案 4 :(得分:0)

我知道这是一个非常古老的线程,但可能对某人有用。我有一个类似的问题,在我的情况下是因为我有 DGV 的 CellMouseDown 事件,我用它来显示一些右键单击的菜单。 在那种情况下,我只对右键单击和清除选择感兴趣,而当它是左键单击 DGV 时;这是在组合框中删除菜单的那个。所以我重写了这个事件,一切都很好。