2014-10-16 93 views
0

在运行时,我将一些datagridview列更改为combobox列。现在如何获得组合框项目中现有的不同值?我正在使用实体模型作为数据源。我的代码是:c#获取datagrid组合框项目中的现有值

dgvLoadTable.DataSource = null; 
var context = new AdminEntities(); 
var TableName = cboSelectTable.Text.ToString(); 
var rawData = context.GetType().GetProperty(TableName).GetValue(context, null); 
var truncatedData = ((IQueryable<object>)rawData).Take(0); 
var source = new BindingSource { DataSource = truncatedData }; 
dgvLoadTable.DataSource = source; 
dgvLoadTable.ReadOnly = false; 
dgvLoadTable.AllowUserToAddRows = true; 

for (int row= 0; row < dgvLoadTable.Rows.Count; row++) 
{ 
    for (int col = 0; col < dgvLoadTable.Columns.Count; col++) 
    { 
     if (col == 2 || col == 4) 
     { 
      this.dgvLoadTable[col, row] = new DataGridViewComboBoxCell(); 
      //var ss = dgvLoadTable.AsEnumerable().Select(_ => _.Field<string>(Columns[col])).Distinct(); 
     } 
    } 
} 

dgvLoadTable.Refresh(); 

回答

0

我假设你的代码创建值列表是工作..

您需要将这些值加载到一个DataGridViewComboBoxCellItems;这里是代码,不会与值的列表:

if (col == 2 || col == 4) 
{ 
    var temp = this.dgvLoadTable[col, row].Value; 
    this.dgvLoadTable[col, row] = new DataGridViewComboBoxCell(); 
    this.dgvLoadTable[col, row].Value = temp; 

    // if the value lists depend on the column, you may want to create them here! 

    ((DataGridViewComboBoxCell)dgvLoadTable[col, row]).Items.AddRange(numbers.ToArray()); 
} 

注意,对于这一点,我们必须细胞对DataGridViewComboBoxCell为正常细胞没有Items

在我的测试情况下,我已经使用了一个

List<string> values 

和控制我的柱这样的数据类型..:

dgvLoadTable[col, row].ValueType = typeof(string); 

..beteween上面的两行,在创建之后即与在填充组合框之前。

更新:我已经添加了两行来保存和恢复单元格的值,因为这些在更改单元格时会丢失..