【问题标题】:Fill ComboBox in Datagridview from Enums从枚举中填充 Datagridview 中的 ComboBox
【发布时间】:2018-10-27 10:19:59
【问题描述】:

这是我的枚举类:

   public enum Uom
        {
            not_known,
            lbs,
            psi,
            tank,
            tube,
            each,
            gallon,
            meters,
            cc,
            mg,
            bag,
            capsule
    }

我想在 datagridview1 的第二列中填充组合框。我试过这段代码:

DataGridViewComboBoxColumn dtgcombo = new DataGridViewComboBoxColumn();

dtgcombo.DataSource = Enum.GetNames(typeof(Uom));

datagridview1.Rows.Add(new object[] { "0", dtgcombo});

但错误提示“...值无效”

【问题讨论】:

  • 你检查过this... 吗?
  • 我不明白对不起:(
  • 哪一行会产生这个错误?还可以尝试@Engineer 添加的答案以添加列,并在此链接示例中参考此答案,以设置项目列表的数据源。 stackoverflow.com/questions/6473326/…

标签: c# datagridview enums


【解决方案1】:

代码正在尝试将DataGridviewColumn 添加到DataGridViewCell. 这不会像您预期的那样工作。此外,将相同的组合框添加到列中的每个单元格是没有意义的。正如工程师回答的那样,您应该将DataGridViewComboBoxColumn 添加到DataGridView。然后,当您添加一行并且您知道要使用什么 enum 时……然后您将添加如下行:datagridview1.Rows.Add("0", Uom.tank.ToString()); 第二个参数可以是任何枚举。下面的代码应该完成您正在尝试做的事情。第二列是组合框列。

DataGridViewComboBoxColumn dtgcombo = new DataGridViewComboBoxColumn();
dtgcombo.DataSource = Enum.GetNames(typeof(Uom));
dataGridView1.Columns.Add(dtgcombo);
dataGridView1.Rows.Add("0", Uom.meters.ToString());
dataGridView1.Rows.Add("0", "");
dataGridView1.Rows.Add("0", Uom.not_known.ToString());

【讨论】:

    【解决方案2】:

    试试

    datagridview1.Columns.Add(dtgcombo);
    

    将组合框添加为所有行的列。

    【讨论】:

      【解决方案3】:

      这是我到目前为止得到的答案..忘记了我的参考链接

      var dtgcombo = new DataGridViewComboBoxCell();
      dtgcombo.DataSource = Enum.GetNames(typeof(Uom)); 
      
      int n = dtgRequests.Rows.Add();
          datagridview1.Rows[n].Cells[0].Value = "0";
          datagridview1.Rows[n].Cells[1] = dtgcombo;
      

      非常感谢大家的帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        • 2018-12-20
        相关资源
        最近更新 更多