【问题标题】:Datagridview Combobox columns won't dropdown (C#)Datagridview Combobox 列不会下拉(C#)
【发布时间】:2012-05-29 18:12:18
【问题描述】:

我有一个包含 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());
                }
            }
        }

    }

【问题讨论】:

  • PopulateComboBoxes() 不是要分享的相关代码吗?
  • 好吧,现在它只是将项目放入列表中,当它被点击时应该下拉。
  • 在第一个 sn-p 中,您的网格是 DataGridView1,在第二个 sn-p 中,它是 grid_Wafer

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    突然想到的一些事情……

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

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

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

    【讨论】:

    • 我还注意到您可能正在使用 winforms,这可能有助于在未来指出。但是,如果您正在处理网络表单,我上面的项目符号会很有帮助... :)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      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);
      
      }
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-15
          • 2011-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-09
          相关资源
          最近更新 更多