【问题标题】:Adding a ComboBox to a DataGridView programmatically以编程方式将 ComboBox 添加到 DataGridView
【发布时间】:2018-05-16 15:34:56
【问题描述】:

假设,我在设计视图中创建了这个 DataGridView。

现在,我需要以编程方式将项目添加到 ComboBox 列并显示索引 = 0 的项目。

以下代码确实加载了一个 ComboBox。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        dataGridView1.Rows.Add("1st Col", "2nd Col");
        Column3.Items.Add("AAAA");
        Column3.Items.Add("BBBB");
        Column3.Items.Add("CCCC");

    }
}

但是,不显示第 0 个项目。

【问题讨论】:

  • 0-th item 表示AAAA?它没有将AAAA 显示为选中状态,或者根本没有AAAA
  • 如果您知道新添加的行的默认值是什么,并且您知道组合框的值...您可以在添加行时不简单地设置其默认值吗?...dataGridView1dgv.Rows.Add("1st Col", "2nd Col", "AAAA");跨度>

标签: c# winforms datagridview


【解决方案1】:

你可以试试:

private void Form1_Load(object sender, EventArgs e)
{
    DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
    cmb.Items.Add("AAAA");
    cmb.Items.Add("BBBB");
    cmb.Items.Add("CCCC");

    dataGridView1.Rows.Add("1st Col", "2nd Col");
    dataGridView1.Columns.Add(cmb);
}

【讨论】:

    【解决方案2】:

    您必须为列中的每个单元格设置当前值。

    for (int i = 0; i < dataGridView.RowCount; i++)
        dataGridView[3, i].Value = "AAAA";
    

    【讨论】:

      【解决方案3】:

      我建议您使用自定义CellTemplate 设置DataGridViewComboBoxColumn 的默认/初始值的另一种方法。

      假设(从显示的图像中),您的 ComboBox 列是 Column[2],您可以为它分配这个自定义的 CellTemplate,它可以使用默认值进行初始化:
      (这里,默认值为 String 类型,但如果需要,您可以将其设为通用)

      public class ComboBoxCell : DataGridViewComboBoxCell
      {
          private static string psDefaultValue;
          public ComboBoxCell()
              : base() { this.Value = psDefaultValue; }
      
          public void DefaultValue(string Value)
          {
              psDefaultValue = Value;
              this.Value = Value;
          }
          public override Type ValueType => typeof(String);
          public override object DefaultNewRowValue => psDefaultValue;
      }
      

      初始化DataGridView时,将自定义CellTemplate分配给DataGridViewComboBoxColumn

      ComboBoxCell ComboBoxCellTemplate = new ComboBoxCell();
      dataGridView1.Columns[2].CellTemplate = ComboBoxCellTemplate;
      

      然后,填写ComboBox项目列表后,定义默认值并使用CellTemplate的自定义DefaultValue()方法分配它:

      ((DataGridViewComboBoxColumn)dataGridView1
                                  .Columns[2])
                                  .Items.AddRange(new string[] { "Item1", "Item2", "Item3" });
      
      ((ComboBoxCell)dataGridView1.Columns[2]
                                  .CellTemplate)
                                  .DefaultValue(((DataGridViewComboBoxColumn)dataGridView1
                                  .Columns[2]).Items[0].ToString());
      

      之后,定义DatagridView 数据源。这样,对于所有新行,DataGridVieewComboBoxColumn 将呈现默认值,在本例中为 ComboBox 的第一项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-15
        • 2015-04-27
        • 2014-10-16
        • 2011-07-11
        • 1970-01-01
        相关资源
        最近更新 更多