2

我有一个填充了 8 列组合框和 32 行的 datagridview。

    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());
                }
            }
        }

    }
4

5 回答 5

2

我有这样的问题。我在调试器中发现的是 DataGridViewComboBoxCells 的 ReadOnly 属性设置为 True。尽管在设计模式下创建该属性时,我将整个列的属性设置为 False。我找不到单元格或列设置为只读的任何地方。在我的代码中,我在分配给数据源后关闭了只读,组合框现在似乎很好。

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

于 2012-09-04T10:55:44.083 回答
1

我们需要更多信息来准确解决这个问题。您能否向我们展示您的前端代码以及您的 PopulateComboBoxes() 方法?

有些事情突然浮现在脑海中...

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

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

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

于 2012-05-29T18:39:02.603 回答
1

我已经打了几次,发现如果DataGridView ComboBox 列绑定到只读字段(即没有定义setter),它将显示为只读。如果您尝试 Rob Hincliff 建议的答案,您将收到此异常:DataGridView column bound to a read-only field must have ReadOnly set to True

于 2015-11-04T14:23:09.780 回答
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);

}
于 2012-05-29T18:42:00.263 回答
0

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

于 2021-03-11T09:28:09.303 回答