【问题标题】:c# Combobox in datagridviewc# datagridview中的Combobox
【发布时间】:2014-10-20 14:32:44
【问题描述】:

在我的 winform 应用程序中有一个数据网格,为了从数据网格插入值,我在按钮单击事件中使用以下代码为某些列生成组合框:

dgvLoadTable.DataSource = source;
dgvLoadTable.ReadOnly = false;
dgvLoadTable.AllowUserToAddRows = true;

var practices = (from p in context.TOWERIMPORTCLIENTs select p.PRACTICE).Distinct();
for(int r= 0; r < dgvLoadTable.Rows.Count; r++)
{
for(int c = 0; c < dgvLoadTable.Columns.Count; c++)
{
    if(c == 2 || c == 4)
    {
        this.dgvLoadTable[c, r] = new DataGridViewComboBoxCell();
        foreach(var name in practices)
            ((DataGridViewComboBoxCell)dgvLoadTable[c, r]).Items
                                                          .AddRange(practices.ToArray());
    }
  }
}

这仅适用于第一个新行,当生成第二个新行时,它没有组合框。那么如何检测是否生成了新行呢?

【问题讨论】:

  • source 是什么对象?
  • 源是实体模型

标签: c# winforms datagridview combobox


【解决方案1】:

您完全可以不使用任何代码来做到这一点。使用设计器将DataGridViewComboBoxColumn 添加到您的数据网格。将此列绑定到绑定到 List&lt;Practice&gt;BindingSource(设置数据源属性)并相应地设置 DisplayMember 和 ValueMember。

例如:

  • 您的 DataPropertyName 将是:练习(这是一个字符串...?)
  • 您的数据源将是一些 bindingsource PracticesBindingSource(参见下面的代码)
  • 您的显示成员将是 PRACTICE(string)
  • 您的价值成员应该是 PRACTICE(对此不确定)

您的 PracticesBindingSource 的绑定将非常简单:

public void BindPractices(DbContext context)
{
    PracticesBindingSource.DataSource = (
       from p in context.TOWERIMPORTCLIENTs 
       select p.PRACTICE
       ).Distinct().ToArray();
}

因为您是这样设计界面的,所以您的 datagridview 显示的每一行都会表现出相同的行为。

如果您愿意,可以在代码中添加 DataGridViewComboBoxColumn。

public void AddDataGridViewComboBoxColumn(DataGridView dgv, string propertyoBindTo)
{
    var dc = new DataGridViewComboBoxColumn();
    dc.DataSource = this.practicesBindingSource;
    dc.DisplayMember = "PRACTICE";
    dc.ValueMember = "PRACTICE";
    dc.DataPropertyName = propertyToBindTo;
    dgv.Columns.Add(dc);
}

【讨论】:

  • 我做不到,我有 11 个表,每个表结构都不一样。所以我必须在运行时用代码创建组合框列。
  • 你没有创建一个组合框列......你正在创建一个组合框单元格......查看我的编辑
  • 在代码中创建列有帮助吗?如果没有,您仍然遇到什么问题?如果,您能否将我的答案标记为“答案”,谢谢!
  • 不,我以其他方式做到了。但是感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多